Notifications
Clear all

eliminar zeros da coluna K

29 Posts
5 Usuários
0 Reactions
3,716 Visualizações
(@joanas)
Posts: 48
Eminent 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
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious 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

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 04/02/2015 6:36 am
Fernando Fernandes
(@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...

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

 
Postado : 04/02/2015 7:23 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Tem toda razão Fernando.

É que nem tive tempo de testar...

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

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

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

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

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

 
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

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
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:

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

 
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...

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 05/02/2015 4:44 am
(@joanas)
Posts: 48
Eminent 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...

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
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

Somente é impossíveis até que alguém faça
A logica está presa na irracionalidade humana, e morta nos que se consideram donos da verdade.

"ALGUM MODERADOR ME EXPULSE DO FÓRUM POR FAVOR"

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

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

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

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

esta aqui um exemplo

obrigada :)

 
Postado : 05/02/2015 11:01 am
Fernando Fernandes
(@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

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

 
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

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

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