VBA – VLOOKUP ou XLOOKUP em Outra Planilha ou Pasta de Trabalho

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on June 8, 2023

Este artigo demonstrará como usar as funções VLOOKUP e XLOOKUP para pesquisar valores em outras planilhas ou pastas de trabalho no VBA.

As funções VLOOKUP e XLOOKUP no Excel são funções úteis que nos permitem pesquisar um valor correspondente em um intervalo e retornar um valor correspondente de outra coluna. Essas funções podem ser usadas diretamente em uma fórmula no Excel ou podem ser usadas na codificação VBA com o método WorksheetFunction. Podemos usar essas funções para procurar valores contidos em uma planilha diferente daquela em que queremos que o resultado seja produzido, ou até mesmo em uma pasta de trabalho diferente.

VLOOKUP e XLOOKUP de Outra Planilha

VLOOKUP de Outra Planilha

Para usar o VLOOKUP em uma planilha diferente dos dados de pesquisa, podemos digitar o seguinte código:

Sub LookupPreco()
   ActiveCell = Application.WorksheetFunction.VLookup(Range("B3"), Sheets("ListaProdutos").Range("B2:C6"), 2, False)
End Sub

OU

Sub LookupPreco() 
   ActiveCell = Application.VLookup(Range("B3"), Sheets("ListaProdutos").Range("B2:C6"), 2, False) 
End Sub

Resultando no seguinte:

exemplo vlookup preco

Também poderíamos, para facilitar o uso, usar variáveis em nosso código.

Sub LookupPreco()
   Dim ws As Worksheet
   Dim rng As Range
   Dim strProduct As String
   strProduct = Range("B3")
   Set ws = Sheets(1)
   Set rng = ws.Range("B2:C6")
   ActiveCell = Application.WorksheetFunction.VLookup(strProduct, rng, 2, False)
End Sub

Isso retornaria o mesmo resultado.

Se estivermos procurando um valor que não existe, talvez seja melhor usar a função Application.VLookup para retornar #N/A à célula, em vez da função Application.WorksheetFunction.VLookup, que resultaria em um erro do VBA.

caso nao encontrado

Se quisermos retornar a fórmula em vez do valor para a célula de destino, então este é o código que precisaremos inserir.

Sub LookupPreco()
   ActiveCell = "=VLOOKUP(RC[-1],ListaProdutos!RC[-1]:R[3]C,2,FALSE)"
End Sub

Onde a fórmula está usando a sintaxe R1C1 (linhas e colunas) em vez da sintaxe A1 (intervalo).

Isso resultaria em:

exemplo deixando formula

XLOOKUP de Outra Planilha

Usar o XLOOKUP para procurar dados em uma planilha diferente é praticamente a mesma coisa. Lembre-se de que o XLOOKUP examina vários intervalos em vez de uma coluna específica para encontrar o valor.

Sub LookupPreco()
   ActiveCell = Application.WorksheetFunction.XLookup(Range("B3"), Sheets("ListaProdutos").Range("B2:B6"), Sheets("ListaProdutos").Range("C2:C6"))
End Sub

ou com variáveis:

Sub LookupPreco()
  Dim ws As Worksheet
  Dim strProduct As String
  Dim rngProduct As Range
  Dim rngPrice As Range
  strProduct = Range("B3")
  Set ws = Sheets("ListaProdutos")
  Set rngProduct = ws.Range("B2:B6")
  Set rngPrice = ws.Range("C2:C6")
  ActiveCell = Application.WorksheetFunction.XLookup(strProduct, rngProduct, rngPrice)
End Sub

O resultado de qualquer um desses exemplos seria, então, o seguinte:

exemplo vlookup preco

Para retornar uma fórmula usando XLOOKUP, precisaríamos mais uma vez usar a sintaxe de linha/coluna (R1C1) em vez da sintaxe de intervalo (A1).

Sub EntrarFormula()
  ActiveCell.FormulaR1C1 = "=XLOOKUP(RC[-1],ListaProdutos!RC[-1]:R[3]C[-1],ListaProdutos!RC:R[3]C)"
End Sub

O resultado disso seria:

exemplo formula procx

Uma das principais vantagens do uso do XLOOKUP em relação ao VLOOKUP é a capacidade de pesquisar um intervalo de colunas e retornar o valor em cada coluna.

Vejamos o exemplo a seguir:

procx varias colunas transborda

Criamos a fórmula na célula C3, onde ela está procurando os valores no intervalo C2:E6. Devido ao fato de serem várias colunas, ela preencherá automaticamente as colunas D e E com os resultados correspondentes encontrados. A fórmula transborda para as colunas D e E sem que tenhamos que usar CTRL+SHIFT para uma fórmula de matriz – essa capacidade da fórmula de transbordar é uma das novas adições do Excel 365.

Para replicar isso com o código VBA, podemos digitar o seguinte em nossa macro:

Sub LookupPreco()
   ActiveCell.Formula2R1C1 = "=XLOOKUP(RC[-1],ListaProdutos!RC[-1]:R[3]C[-1],ListaProdutos!RC:R[3]C[2])"
End Sub

Onde a fórmula está usando a sintaxe R1C1 (linhas e colunas) em vez da sintaxe A1 (intervalo). Isso fará com que as fórmulas sejam inseridas no Excel conforme mostrado no gráfico acima.

Não é possível pesquisar várias colunas se você estiver usando o método WorksheetFunction.

VLOOKUP e XLOOKUP de Outra Pasta de Trabalho

Trabalhar com outra pasta de trabalho em vez de uma planilha diferente é praticamente a mesma coisa.

VLOOKUP de Outra Pasta de Trabalho

Considere o seguinte exemplo:

procv outra pasta

Para replicar isso com o código VBA, criaríamos a macro a seguir:

Sub LookupPreco()    
  ActiveCell = Application.WorksheetFunction.VLookup(Range("B3"), Workbooks("Produtos.xlsm").Sheets("ListaProdutos").Range("B2:C6"), 2, False)
End Sub

onde o arquivo Products.xlsm precisaria estar aberto no Excel para que essa pesquisa funcionasse.

Também poderíamos usar variáveis:

Sub LookupPreco()
  Dim wb As Workbook
  Dim ws As Worksheet
  Dim rng As Range
  Dim strProduct As String
  Set wb = Workbooks("Produtos.xlsm")
  Set ws = wb.Sheets("ListaProdutos")
  Set rng = ws.Range("B2:C6")
  strProduct = Range("B3")
  ActiveCell = Application.WorksheetFunction.VLookup(strProduct, rng, 2, False)
End Sub

O resultado de qualquer um desses exemplos seria:

procv-resultado-numerico

 

 

Se quiséssemos que a fórmula real aparecesse na célula em vez do valor, nosso código VBA incorporaria o nome da pasta de trabalho, bem como o nome ou o número da planilha.

Por exemplo:

Sub LookupPreco()
  ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],[Produtos.xlsm]ListaProdutos!R3C2:R6C3,2,FALSE)"
End Sub

XLOOKUP de Outra Pasta de Trabalho

A vinculação a outro arquivo usando o XLOOKUP em vez do VLOOKUP segue as mesmas linhas.

Para retornar o valor ao Excel:

Sub LookupPreco()
   ActiveCell = Application.WorksheetFunction.XLookup(Range("B3"),  Workbooks("Produtos.xlsm").Sheets("ListaProdutos").Range("B2:B6"), Workbooks("Produtos.xlsm").Sheets("ListaProdutos").Range("C2:C6"))
End Sub

ou com variáveis:

Sub LookupPreco()
  Dim wb as Workbook
  Dim ws As Worksheet
  Dim strProduct As String
  Dim rngProduct As Range
  Dim rngPrice As Range
  strProduct = Range("B3")
  Set wb = Workbooks("Produtos.xlsm")
  Set ws = wb.Sheets("ListaProdutos")
  Set rngProduct = ws.Range("B2:B6")
  Set rngPrice = ws.Range("C2:C6")
  ActiveCell = Application.WorksheetFunction.XLookup(strProduct, rngProduct, rngPrice)
End Sub

O resultado de qualquer um desses exemplos seria, então, o seguinte:

procv-resultado-numerico

Para retornar a fórmula ao Excel em vez do valor, podemos alterar nossa macro para incluir o nome da pasta de trabalho, bem como o nome ou o número da planilha.

Sub LookupPreco()
   ActiveCell.Formula2R1C1 = "=XLOOKUP(RC[-1],[Produtos.xlsm]ListaProdutos!RC[-1]:R[3]C[-1],[Produtos.xlsm]ListaProdutos!RC:R[3]C[2])"
End Sub
vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA