Página 1 de 1

Execução lenta de macro

Enviado: 28 Dez 2017 às 02:30
por Domingsp
Olá, tenho uma macro que precisa realizar uma tarefa simples: mostrar qual numero somado a outro é igual a um terceiro numero.
Na figura, na coluna A tem numeros de 0 a 10, que sao os possiveis resultados da operação.
A macro tem que fazer o calculo: 1+2=3 . O numero 3 consta na coluna A, então existe resposta pra essa conta.
Na coluna H é mostrado 1 3, que é o numero em F, 1, e o resultado da operação, 3.
O problema é que leva muito tempo pra executar, acho que quase 30 min. Eu não entendo porquê.
Código: Selecionar todos
Sub TAREFASIMPLES()
Sheets("Plan5").Activate
Application.ScreenUpdating = False
For m = 1 To 11  'Elementos col A
For n = 1 To Range("F1").End(xlDown).Row   
 If Cells(n, 6) + Cells(1, 4)= Cells(m, 1) Then
   Cells(i + 1, 8) = Cells(n, 6) &  " " & Cells(m, 1): i = i + 1
 End If
Next n
Next m
ActiveSheet.Range("H:H").RemoveDuplicates Columns:=1, Header:=xlNo
 Application.ScreenUpdating = True
End Sub
Imagem

Execução lenta de macro

Enviado: 28 Dez 2017 às 07:19
por wesleyribeiro123
DomingSP
Bom dia,

Amigo observe que no segundo laço "For Next" você está buscando a última linha preenchida, porém como só possui um valor laço desce direto e desta forma você faz com ele percorra todas as 1.048.576 linhas existentes no Excel e como este laço está dentro de outro, ele vai repetir isso por 11 vezes, ou seja, a execução está percorrendo 11.534.336 linhas e validando...
Tente identificar a última linha preenchida sempre de baixo para cima que não haverá erros!
Veja:
Código: Selecionar todos
Sub TAREFASIMPLES()
Dim uLin As Integer
Application.ScreenUpdating = False
For m = 1 To 11  'Elementos col A
uLin = Cells(Rows.Count, 6).End(xlUp).Row
For n = 1 To uLin
 If Cells(n, 6) + Cells(1, 4) = Cells(m, 1) Then
   Cells(i + 1, 8) = Cells(n, 6) & " " & Cells(m, 1): i = i + 1
 End If
Next n
Next m
ActiveSheet.Range("H:H").RemoveDuplicates Columns:=1, Header:=xlNo
 Application.ScreenUpdating = True
End Sub

Execução lenta de macro

Enviado: 29 Dez 2017 às 19:39
por Domingsp
Resolveu. Obrigado!