reformulação de mac...
 
Notifications
Clear all

reformulação de macro

33 Posts
4 Usuários
0 Reactions
6,000 Visualizações
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Olá! Eu estou desenvolvendo uma planilha que já está funcionando. Porém funciona lenta. Muito lenta. E desconfio de uma programação específica.
Então eu gostaria da ajuda de vocês aqui do fórum com uma macro que seja mais rápida. Vou passar a macro que desconfio ser o problema.

'macro para deletar as linhas que contiverem "..."
For linha = 1000 To 6 Step -1
If ThisWorkbook.ActiveSheet.Range("t" & linha) = "..." Then
ThisWorkbook.ActiveSheet.Rows(linha).Delete
End If
Next linha

Agradeço a ajuda!!!
Um abraço.

 
Postado : 05/08/2014 3:01 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Meio difícil dizer, mas tente assim:

'macro para deletar as linhas que contiverem "..."
application.screenupdating = false
For linha = 1000 To 6 Step -1
If Range("t" & linha) = "..." Then
Rows(linha).Delete
End If
Next linha
application.screenupdating = true

Edit: Ah, outra coisa, usar o Active alguma coisa sempre é mais lento do que usar uma variável, ou do que ser específico, assim, poderia retirar essa parte.

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

Gilmar

 
Postado : 05/08/2014 3:32 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

ah sim... eu uso isso..
é que eu só passei parte da programação.. tem mais coisas antes e depois..
mesmo assim, valeu!!!!

 
Postado : 05/08/2014 3:37 pm
(@edcronos)
Posts: 1006
Noble Member
 

Julio,
existe varias maneira de se excluir linhas, mas para se definir a melhor maneira tem que se saber como é o layout da planilha
pode-se simplesmente mover os dados para juntar tudo "muito mais rápido"
mas as formatações não acompanham, Nem as formulas
para se definir a melhor maneira é um importante saber como é a sua planilha

download/file.php?id=13352

Essa planilha tem duas macros que Adiciona e Exclui linhas em branco

Uma Move os Valores e outra que Adiciona e Exclui Linhas
é só coloca a range da sua planilha na macro

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/08/2014 4:00 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

o problema é o .Delete rodando mil vezes...

Eu usaria o Application.Union dentro do loop ao invés do .Delete... e depois que sair do loop, aplicar o .delete uma vez só... não vou poder fazer no seu arquivo, mas segue um exemplo relampago:

'macro para deletar as linhas que contiverem "..."
dim rngParaDeletar as Excel.Range
    set rngParaDeletar = activesheet.rows(1001)

    For linha = 1000 To 6 Step -1
        If ActiveSheet.Range("t" & linha) = "..." Then
            SET RNGPARADELETAR = application.union(rngparadeletar,ActiveSheet.Rows(linha))
        End If
    Next linha
    if not rngparadeletar = nothing then
        rngparadeletar.delete shift:=xlup
    endif

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

 
Postado : 05/08/2014 4:10 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Fernando, tentei usar seu código. Mas deu o seguinte:
ele marcou o NOTHING, e apareceu uma caixinha dizendo: erro de compilação. Uso inválido do objeto.

Edcronos, vou entender melhor a sua planilha pra fazer uns testes aqui e te dou um retorno em seguida do teste...

Obrigado!

 
Postado : 05/08/2014 5:11 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Erro primário meu... segue correção:

'macro para deletar as linhas que contiverem "..."
dim rngParaDeletar as Excel.Range
    set rngParaDeletar = activesheet.rows(1001)

    For linha = 1000 To 6 Step -1
        If ActiveSheet.Range("t" & linha) = "..." Then
            SET RNGPARADELETAR = application.union(rngparadeletar,ActiveSheet.Rows(linha))
        End If
    Next linha
    if not rngparadeletar IS nothing then
        rngparadeletar.delete shift:=xlup
    endif

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

 
Postado : 05/08/2014 5:35 pm
(@edcronos)
Posts: 1006
Noble Member
 

refiz a macro que excluir e adiciona linhas para excluir a linha inteira

Sub Adiciona_Exclui_Linhas_Em_Branco_De_Range_MoveLinhasColunaT()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    cr = Cells(1, "T").Column    'coluna de referencia indica a coluna que vai verificar se a Linhas está em branco
    
    l = 0 ' <<< Se Colocar ZERO apaga todas as linhas em branco, maior que zero adiciona linhas em branco
    
    Lf = 2    'Linha inicial da range

    Li = Cells(Rows.Count, cr).End(xlUp).Row    ' ultima linha da range
    tl = 0: kl = 0
    Do
        Li = Li - 1
        If Cells(Li, cr) <> "" Then
            If tl > l Then
                lk = tl - l
                Range(Li + 1 & ":" & Li + lk).Rows.Delete Shift:=xlUp
            End If
            If tl < l Then
                lk = l - tl
                Range(Li + 1 & ":" & Li + lk).Rows.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
            End If
            tl = 0
        Else
            tl = tl + 1
        End If
    Loop Until Li = Lf
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

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/08/2014 5:38 pm
(@edcronos)
Posts: 1006
Noble Member
 

agora que reparei vc não quer excluir as linhas que estão em branco
"..."

se for isso ...

troque essa linha
If Cells(Li, cr) <> "" Then
por esta
If Cells(Li, cr) <> "..." Then

cara desculpe
deu branco total aqui e nem sei se funcionaria no seu arquivo

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/08/2014 5:56 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Fernando!!! Fiz a sua e foi perfeito! Ganhei muito tempo!
Muito obrigado!! Fascinante!! hehe

E Edcronos, eu vou testar a sua agora então!!!

 
Postado : 05/08/2014 6:06 pm
(@edcronos)
Posts: 1006
Noble Member
 

é que a macro atbm adiciona linhas
mas seria no caso de ser em branco

Sub Adiciona_Exclui_Linhas_Em_Branco_De_Range_MoveLinhasColunaT()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    cr = Cells(1, "T").Column    'coluna de referencia indica a coluna que vai verificar se a Linhas está em branco
    
    l = 0
    
    Lf = 2    'Linha inicial da range

    Li = Cells(Rows.Count, cr).End(xlUp).Row    ' ultima linha da range
    tl = 0: kl = 0
    Do
        Li = Li - 1
        If Cells(Li, cr) <> "..." Then
                lk = tl - l
                Range(Li + 1 & ":" & Li + lk).Rows.Delete Shift:=xlUp
            tl = 0
        Else
            tl = tl + 1
        End If
    Loop Until Li = Lf
    Application.Calculation = xlCalculationAutomatic
    Application.ScreenUpdating = True
End Sub

ela para vc acho que ficaria assim
apenas excluindo linhas que tivesse "..."

testa aí pelo menos para me dizer se funciona, eu não consegui raciocinar em relação aos ...

att

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/08/2014 6:12 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Qto tempo demorava antes e qto tempo passou a demorar ?

FF

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

 
Postado : 05/08/2014 6:22 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

Edcronos, não funcionou. Ficou rodando, rodando e tive que sair pelo ctrl + alt + del.

Te agradeço demais a ajuda, mas vou ficar com a do Fernando, que adiantou muito meu lado!!

Obrigado amigos!!
Um abraço grande.

 
Postado : 05/08/2014 6:31 pm
(@edcronos)
Posts: 1006
Noble Member
 

bem, eu tentei,
o fernando é profissional
eu só faço gatilhos
mas não consegui raciocinar em relação aos 3 pontos

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/08/2014 6:50 pm
(@juliowd)
Posts: 149
Estimable Member
Topic starter
 

E ae....
Deu erro 1004 na
If Cells(Li, cr) <> "..." Then
=/

 
Postado : 05/08/2014 7:10 pm
Página 1 / 3