Function Check()
Dim valorA, valorB, valorG, valor2 As String
Dim rng As Range
valorG = Cells(ActiveCell.Row, "G").Value
valor2 = Cells("2", ActiveCell.Column).Value
For Each rng In Range("A3:A321")
Do While rng <> ""
valorA = rng.Value
valorB = rng.Offset(0, 1).Value
If valorA = valorG Then
If valorB = valor2 Then
ActiveCell.Value = rng.Offset(0, 2).Value
End If
End If
Loop
Next rng
End Function
1 Resposta
Bom dia, Vejo alguns erros:
Erro1: na declaração das variáveis valorA, valorB e valorG estão como variáveis do tipo Variant e apenas valor2 como STRING.
Se ValorA, ValorB e ValorG forem string, que tenho 99% de certeza que é o seu caso, você deve trocar a sua declaração por:
Dim valorA as string, valorB as string, valorG as string, valor2 As String
O seu código pode até funcionar com variáveis VARIANT, mas elas consomem mais memória e executam o código de forma mais lenta.
Erro2: Este procedimento deveria ser uma Sub, em vez de uma Function
Erro3: na linha "valor2 = Cells("2", ActiveCell.Column).Value", você não deveria colocar o 2 entre aspas, pois o código o interpretará como string e novamente seu código vai rodar mais lentamente.
Erro4: O seu laço condicional duplo pode ser substituido por:
If valorA = valorG and valorB = valor2 Then
ActiveCell.Value = rng.Offset(0, 2).Value
End If
Que é uma expressão bem mais simples de se entender e de se manutenir.
Pode haver outros erros, mas precisaria saber o objetivo da macro para interpretar se é um erro. Eu particularmente não gosto de trabalhar com a propriedade offset. Prefiro fazer Cells(linha+1,coluna) ou Cells(linha,coluna+1) pois o debug fica mais fácil.
ActiveCell
terá sempre o último resultado desejado, quando as duas condições de seusifs
forem contempladas. É isso mesmo? Qual o erro? Se postar a planilha e explicar a ideia, talvez consiga uma resposta mais aproximada para auxiliar no problema.Function Check()
porSub Check()
. Pois você está utilizandoActiveCell
.Application.Caller
e nãoActiveCell
Há algo errado com esse código?
não ajuda a entender o problema.