0
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
4
  • 1
    Amigo, acredito que o código em si está ok, mas alguns comentários... um loop dentro do outro nunca é recomendado e neste caso ai sua ActiveCell terá sempre o último resultado desejado, quando as duas condições de seus ifs 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.
    – Evert
    Commented 9/04/2018 às 10:26
  • Troque Function Check() por Sub Check(). Pois você está utilizando ActiveCell. Commented 11/04/2018 às 15:58
  • Ou se desejar criar uma Function utilize Application.Caller e não ActiveCell Commented 11/04/2018 às 16:00
  • Por favor, leia o Manual de como NÃO fazer perguntas, Como devemos formatar perguntas e respostas? e Seja mais específico na pergunta. Pois o título Há algo errado com esse código? não ajuda a entender o problema. Commented 11/04/2018 às 18:28

1 Resposta 1

1

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.

Você deve fazer log-in para responder a esta pergunta.

Esta não é a resposta que você está procurando? Pesquise outras perguntas com a tag .