Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por Domingsp
Posts
#29056
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
Avatar do usuário
Por wesleyribeiro123
Posts Avatar
#29059
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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord