Notifications
Clear all

eliminar zeros da coluna K

29 Posts
5 Usuários
0 Reactions
3,706 Visualizações
(@joanas)
Posts: 0
New Member
Topic starter
 

Bom dia,

eu tenho este código para eliminar zeros da coluna K:K
nunca sei o fim da coluna, mas tenho sempre cerca de 18000 registos.
Ao usar o código, não me elimina os zeros todos. Por exemplo, se tiver 36 zeros, ele elimina 19, e se correr a macro outra vez é que elimina o resto dos zeros.. podem ajudar?

Sheets("Book").Select
Range("K9:K" & linha).Select
For Each cell In ActiveSheet.UsedRange
If cell.Value2 = "0" Then cell.EntireRow.Delete
Next cell

Obrigada

 
Postado : 04/02/2015 3:38 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

joanas,

Bom Dia!

Bom... não sei se entendi corretamente. Eu faria assim:

Sub ApagarZeros()
    Dim UltimaLinha As Long
    Dim i As Long
    
    UltimaLinha = Sheets("Book").Cells(Cells.Rows.Count, 11).End(xlUp).Row
    For i = 9 To UltimaLinha
        If Range("K" & i).Value = 0 Then
            Rows(i & ":" & i).Select
            Selection.Delete Shift:=xlUp
        End If
    Next
    Range("A8").Select
End Sub
 
Postado : 04/02/2015 6:36 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wagner, há uma falha de lógica no seu código...
É o seguinte... se o loop está contando de 1 em 1, e apagar por exemplo a linha 9, todas as linhas sobem, e a 10 passa a ser 9, porém no seu loop a linha seguinte a ser testada é a 10, a nova linha 10. Ou seja, a linha 10 original, que agora está posicionada na linha 9, não será testada e se tiver um 0 ali ela será mantida.
Neste caso, eu sugeriria a seguinte mudança no seu código:

Sub ApagarZeros()
    Dim UltimaLinha As Long
    Dim i As Long
    
    UltimaLinha = Sheets("Book").Cells(Cells.Rows.Count, 11).End(xlUp).Row
    For i = 9 To UltimaLinha
        If Range("K" & i).Value = 0 Then
            Rows(i & ":" & i).Delete Shift:=xlUp 'eliminar o select e o selection 
            i = i-1
        End If
    Next
    Range("A8").Select
End Sub

Joana, não sei pq vc usa o .Select e depois varre todas as células do used range... eu faria assim:

Sheets("Book").Select

For Each cell In Sheets("Book").Range("K9:K" & linha)
If cell.Value = "0" or cell.Value = 0 Then cell.EntireRow.Delete
Next cell

Se quiser tentar com o .Value ao invés do .Value2, é melhor...
*não sei quem te indicou usar o Value2, mas evite ao máximo.
O Value2 é mais simlpes que o Value e por isso, uns 2% mais rápido, mas não identifica todos os tipos de dados nas células o que pode causar problemas de execução...

 
Postado : 04/02/2015 7:23 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Tem toda razão Fernando.

É que nem tive tempo de testar...

Geralmente, nesses caso, eu uso For i = UltimaLinha to 9 Step -1.

 
Postado : 04/02/2015 12:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Eu tb prefiro começar de baixo pra cima! Pq esse problema de fato desaparece...

 
Postado : 04/02/2015 1:49 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Se quiser tentar com o .Value ao invés do .Value2, é melhor...
*não sei quem te indicou usar o Value2, mas evite ao máximo.
O Value2 é mais simlpes que o Value e por isso, uns 2% mais rápido, mas não identifica todos os tipos de dados nas células o que pode causar problemas de execução...

Fernando,

Eu tinha postado um código semelhante ao que vc postou aqui, porque o exemplo da joanas trazia apenas números, e pelo que li, o Value só faz diferença para datas e moeda.

Ao contrário, também li que o Value2 é melhor para numeros.

Abs

 
Postado : 04/02/2015 8:34 pm
(@edcronos)
Posts: 1006
Noble Member
 

eu uso value2 para tudo, até para datas "só tem que tomar cuidado se tiver comparação, aí os dois tem que está no mesmo formato"

apenas uso outro tipo "até text" quando quero copiar o formato da celula

mas considerando que tenho o raciocínio meio conturbado não posso ser levado muito a serio :roll:

 
Postado : 05/02/2015 1:05 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Ed, tirando a parte de usar .Value2 para datas, o resto segue de acordo com essa explicação aqui:

https://fastexcel.wordpress.com/2011/11 ... -avoid-it/

A menos que alguém tenha uma explicação melhor, claro...

 
Postado : 05/02/2015 4:44 am
(@joanas)
Posts: 0
New Member
Topic starter
 

a macro continua sem eliminar os zeros todos : será que é por ter numeros negativos e positivos?

 
Postado : 05/02/2015 9:33 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Se vc mandasse o modelo da planilha ficaria mais fácil entender porque não deu certo...

 
Postado : 05/02/2015 9:48 am
(@edcronos)
Posts: 1006
Noble Member
 

Joanas então o ideal seria postar um exemplo da sua planilha com esses dados que vão ser comparados para a exclusão

diferenças de valores pode sim influenciar no resultado
para se ter uma ideia se ferem letras até maiúsculas ou minúsculas faz diferença e tem que ser tratadas de acordo

tipo datas
se for para comparar igualdades value2 serve "mas os dois tem que estar no mesmo formato (Value2)"
mas para diferença de dias ou para saber se é sexta ou quarta não dá.

Ed, tirando a parte de usar .Value2 para datas, o resto segue de acordo com essa explicação aqui:

https://fastexcel.wordpress.com/2011/11 ... -avoid-it/

eu já tinha visto essa, no caso de value2 para datas eu uso para transferência de valores ou comparar igualdades

 
Postado : 05/02/2015 9:52 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Por favor ao postar seu modelo, compacte-o antes. Conforme as regras do forum (link na minha assinatura)

 
Postado : 05/02/2015 10:50 am
(@joanas)
Posts: 0
New Member
Topic starter
 

esta aqui um exemplo

obrigada :)

 
Postado : 05/02/2015 11:01 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Joana, desculpe, mas tive que remover seu anexo. Regras do forum.

Por favor ao postar seu modelo, compacte-o antes. Conforme as regras do forum (link na minha assinatura)

Regras do forum:

Upload
Devido a ultrapassagem da marca de 1,5Gb de armazenamento de arquivos na hospedagem do Planilhando, limitaremos o tamanho de cada arquivo para 2Mb sendo obrigatório o uso dos formatos .zip - .rar - .ice visto a gratuidade e não geração de recursos para bancar o site.

Assim sendo, todos os anexos deste tópico foram removidos.

Por favor leia as regras (link na minha assinatura), e passe a compactar todos os seus anexos.

Obrigado,

Fernando

 
Postado : 05/02/2015 11:11 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Eu rodei assim e funcionou:

Sub elimina_zeros()

Application.ScreenUpdating = False

Sheets("Book").Select

Dim UltimaLinha As Long
Dim i As Long

UltimaLinha = Sheets("Book").Cells(Cells.Rows.Count, 11).End(xlUp).Row
For i = UltimaLinha To 9 Step -1
    If Cells(i, "K").Value2 = 0 Then
        Cells(i, "K").EntireRow.Delete
    End If
Next

Range("J4").Value = Application.WorksheetFunction.CountIf(Range("K9:K" & UltimaLinha), 0)

Application.ScreenUpdating = True

End Sub
 
Postado : 05/02/2015 11:17 am
Página 1 / 2