Notifications
Clear all

Excluir Colunas com condição

10 Posts
4 Usuários
0 Reactions
1,764 Visualizações
(@samuubr)
Posts: 10
Active Member
Topic starter
 

Boa noite senhores.

Tenho quebrado a cabeça para resolver uma situação em específico. Espero que alguém consiga dar uma luz, afinal, a cabeça não processa mais. rss
Coloquei um exemplo da minha planilha. preciso que todas as colunas que a partir da linha 3 até a linha 400, que não tenham dados, sejam excluidas.
Explicando o exemplo anexo:

Validaria se da célula H3 até H400 tem informação, caso não tenha nada, iria excluir a coluna.
No exemplo, a coluna H, K e L, seriam excluidas por não terem dados nenhum.

https://uploaddeimagens.com.br/imagens/colunas-jpg

OBS: São "N" Colunas..ou seja autoincrementa por dia as colunas..cada dia tem 6 colunas a mais para ser validado.

 
Postado : 27/09/2015 5:27 pm
(@alvaro)
Posts: 78
Trusted Member
 

Samuubr, boa noite meu amigo.
Você poderia postar a planilha pra gente por favor?
Fica mais fácil.
Eu entendi o que você quer, mas tenho algumas perguntas:
Os dados vão até qual coluna?

Abraços!!

 
Postado : 27/09/2015 5:43 pm
(@samuubr)
Posts: 10
Active Member
Topic starter
 

Boa noite Alvaro.

Primeiramente, obrigado pelo retorno. Coloquei uma planilha de exemplo no 4shared, se preferir, posso colocar em outro servidor.

http://www.4shared.com/file/xLORC35Fce/Exemplo.html

Quanto até que coluna que vai, o certo seria deixar o range até a última coluna do excel "XFD", visto que todo dia, terei novas colunas com valores. Então precisava que todas as colunas do range "C:C;XFD:XFD" que não tivessem valores entre as linhas 3 e 400, fossem excluidas.

Exemplo: Se no range C3:C400 não tiver valor, excluir esta coluna..e assim por diante D3:D400..E3:400...etc

 
Postado : 27/09/2015 6:00 pm
(@samuubr)
Posts: 10
Active Member
Topic starter
 

Pessoal, bom dia.

Alguma luz? Alguém sabe como posso fazer esta parte da macro?

 
Postado : 28/09/2015 4:35 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pessoal, bom dia.
Alguma luz? Alguém sabe como posso fazer esta parte da macro?

Um dos quesitos principais quando solicitamos ajuda em qualquer Forum é a paciencia, lembrando que toda a ajuda costuma ser voluntária e sempre quando os colaboradores têm tempo disponível.
Depois voce tem de ter em mente que nem todos tem acesso a drivers virtuais, eu por exemplo não consegui ver nenhum dos anexos, o ideal deveria ter anexado aqui no Forum mesmo respeitando as Regras quanto a anexar arquivos.
Sendo assim segue uma rotina que estou indo por suposição, execute-a e veja se é isto o que precisa.

Sub DeletaColunaCondicao()
    Dim sCol As Long 'Coluna
    Dim sLin As Long 'Linha
    Dim sTTColunas As Long 'Toatal Colunas
    
    'Conta o Total de Colunas
    sTTColunas = Cells(1, Columns.Count).End(xlToLeft).Column
    
    'Loop nas Colunas, ignorando colunas 1 e 2 - To 3 Step -1
    For sCol = sTTColunas To 3 Step -1  'colunas .. To 3 Step -1 Ignorar Colunas A e B
        
        'Loop a partir da Linha 3 - sLin = 3
        For sLin = 3 To Cells(Rows.Count, "A").End(xlUp).Row
            If Cells(sLin, sCol) = "" Then
               Columns(sCol).Delete 'Deleta a COLUNA
                       GoTo soutra
               End
               Exit For
            End If
        Next sLin
soutra:
    
    Next sCol

End Sub

Qualquer duvida retorne.

Se a dica foi útil clique na mãozinha ao lado do icone CITAR para agradecer.
[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 28/09/2015 7:52 am
(@samuubr)
Posts: 10
Active Member
Topic starter
 

Bom dia Mauro.

Primeiramente desculpa se deu a impressão de afobado.
Agradeço seu retorno e seu apoio. Tentei usar a macro que me passou, mas não deu resultado. Se altero o campo " If Cells(sLin, sCol) = "" " para "If Cells(sLin, sCol) = 0 ", ele processa a planilha toda e apaga todas as colunas que tenham 0, independente se na coluna tenha alguma célula com valor.

Coloquei no anexo do próprio Fórum uma planilha de exemplo, me confirma se ficou de acordo, por favor.

Nesta planilha de exemplo, pode-se ver que não tenho valor da coluna H (Da linha 3 para baixo), então essa coluna poderia ser excluida. Ja outra situação seria a coluna G, esta tem informação (G6), desta forma, esta coluna não poderia ser excluída. Espero ter conseguido explicar bem.

Desde já, muito obrigado.

 
Postado : 28/09/2015 8:51 am
(@samuubr)
Posts: 10
Active Member
Topic starter
 

Bom dia Pessoal.

Para tentar resolver esta questão, tentei fazer um "soma", onde se a soma da coluna (da linha 3 para baixo), fosse igual a 0, excluiria a coluna, mas não estou conseguindo usar o comando. abaixo o código utilizado:

Sub Remover_colunas()
Dim sCol As Long ' Coluna
Dim sLin As Long ' LInha
Dim sTTColunas As Long ' Total coluna

sTTColunas = Cells(1, Columns.Count).End(xlToLeft).Column 'conta o total de colunas
For sCol = sTTColunas To 3 Step -1 ' conta da coluna 3 em diante
For sLin = 3 To Cells(Rows.Count, "A").End(xlUp).Row ' conta da linha 3 em diante
If Application.Sum(Cells(sLin, sCol)) = 0 Then ' aqui tentei usar a formula sum, onde se na coluna a soma de valores for igual a zero, a coluna é excluida
Columns(sCol).Delete
GoTo soutra
End
Exit For
End If
Next sLin
soutra:
Next sCol
End Sub

 
Postado : 29/09/2015 6:11 am
(@samuubr)
Posts: 10
Active Member
Topic starter
 

Bom dia senhores.

Alguma luz para o meu problema?..ou realmente não tem o que fazer e sempre vou ter que ficar excluindo manualmente?

 
Postado : 03/10/2015 7:20 am
selmo
(@selmo)
Posts: 236
Estimable Member
 

Eu sempre utilizo este exemplo que acredito ser de autoria do Tomaz Vasquez, é bem simples, mais na sua simplicidade consegue suprir todas as minhas nescessidades

'O que ele faz efetivamente é, receber 4 parâmetros, sendo eles:

'o índice da linha inicial de busca
'o índice da linha final de busca
'o índice da coluna onde se deve buscar o critério
'o valor do critério no formato de string

Sub Executa()
    valor = InputBox("Digite o valor a ser excluido")
    MsgBox "Foram excluídas " & ExcluiLinhasPorCriterio(1, 8, 1, valor) & " linhas"
End Sub

Function ExcluiLinhasPorCriterio(ByVal linhaInicial As Integer, ByVal linhaFinal As Integer, ByVal colunaCriterio As Integer, ByVal criterio As String) As Integer
    Dim linhasExcluidas As Integer
    Dim i As Integer
    linhasExcluidas = 0
    With ActiveSheet
        i = linhaInicial
        While i < linhaFinal
            If CStr(.Cells(i, colunaCriterio).Value) = criterio Then
                .Rows(i).Delete
                linhasExcluidas = linhasExcluidas + 1
            Else
                i = i + 1
            End If
        Wend
    End With
    ExcluiLinhasPorCriterio = linhasExcluidas
End Function

É bem simples e acredito que seja autoexplicativo, mais quaisquer duvidas estamos ae ^^

"A mente que se abre a uma nova ideia jamais voltará ao seu tamanho original."
Albert Einstein

 
Postado : 03/10/2015 2:15 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Sammur, com o seu exemplo ficou bem melhor entender o que pretende, então, como já temos a Linha Inicial e o total das colunas, nos resta contar o total de linha e passar estes valores para as variaveis e montarmos a rotina de outra forma, na rotina anterior nós tinhamos um Loop utilizando o For
For sLin = 3 To Cells(Rows.Count, "A").End(xlUp).Row então na função SUM é sempre somado com o incremento da linha e não a linha inicial e final.
Fiz os ajustes necessários e veja se se é isto.

Sub Remover_colunaSomaZero()
    Dim sCol As Long ' Coluna
    Dim sLin As Long ' LInha
    Dim sTTColunas As Long ' Total coluna
    Dim ultimalinha As Long 'Ultima Linha
    
    sLin = 3 'Linha Inicial
    sTTColunas = Cells(2, Columns.Count).End(xlToLeft).Column 'conta o total de colunas
    ultimalinha = Range("A1048576").End(xlUp).Row 'verifica qual a ultima celula preenchida

    For sCol = sTTColunas To 3 Step -1 ' conta da coluna 3 em diante
        'se a soma da coluna for igual a zero, a coluna é excluida
        If Application.Sum(Range(Cells(sLin, sCol), Cells(ultimalinha, sCol))) = 0 Then
            
            Columns(sCol).Delete
            
            GoTo soutra
            End
            Exit For
            
        End If

soutra:
    Next sCol
    
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 03/10/2015 7:56 pm