VBA Match

Da mesma forma que temos Índice e Correspondência na planilha como funções de pesquisa, também podemos usar as funções de Correspondência no VBA como uma função de pesquisa, esta função é uma função de planilha e é acessada pelo aplicativo. método de planilha e, uma vez que é uma função de planilha, os argumentos para a função Match são semelhantes aos da função de planilha.

Função VBA Match

A função VBA Match procura a posição ou o número da linha do valor de pesquisa na matriz da tabela, ou seja, na tabela principal do Excel.

Em uma planilha, as funções de pesquisa são parte integrante do Excel. Algumas das funções de pesquisa importantes são VLOOKUP, HLOOKUP, INDEX e MATCH. Infelizmente, não temos essas funções como funções VBA. No entanto, podemos usá-los como funções de planilha no VBA.

Neste artigo, mostrarei como usar uma das funções de pesquisa de planilha MATCH no VBA como uma função de planilha.

Como usar a função MATCH no VBA Excel?

Mostraremos um exemplo simples de uso da função Excel MATCH no VBA.

Você pode baixar este modelo VBA Match Excel aqui - VBA Match Excel Template

Exemplo 1

No VBA, podemos usar esta fórmula MATCH no Excel como função de planilha. Siga as etapas abaixo para usar a função MATCH em VBA.

Etapa 1: Crie um subprocedimento dando um nome de macro.

Código:

 Sub Match_Example1 ()

Passo 2: Na célula E2, precisamos do resultado, então inicie o código como Faixa (“E2”). Valor =

Código:

 Sub Match_Example1 () Intervalo ("E2"). Valor = End Sub 

Passo 3: Na célula E2, o valor deve ser o resultado da fórmula MATCH. Portanto, para acessar a função VBA MATCH, precisamos primeiro usar a propriedade “WorksheetFunction”. Nesta propriedade, obteremos toda a lista de funções da planilha disponível.

Etapa 4: Selecione a função MATCH aqui.

Código:

 Sub Match_Example1 () Intervalo ("E2"). Value = WorksheetFunction.Match (End Sub 

Etapa 5: agora o problema começa porque não obtemos o nome exato da sintaxe, em vez disso, obtemos a sintaxe como “Arg1, Arg2, Arg3” assim. Portanto, você precisa ter certeza absoluta das sintaxes aqui.

Nosso primeiro argumento é LOOKUP VALUE, nosso LOOKUP VALUE está na célula D2, então selecione a célula como Range (“D2”). Value .

Código:

 Sub Match_Example1 () Range ("E2"). Value = WorksheetFunction.Match (Range ("D2"). Value, End Sub 

Passo 6: O segundo argumento é Table Array, nosso intervalo de table array vai de A2 a A10. Portanto, selecione o intervalo como “Intervalo (“ A2: A10 ”)”

Código:

 Sub Match_Example1 () Range ("E2"). Value = WorksheetFunction.Match (Range ("D2"). Value, Range ("A2: A10"), End Sub 

Etapa 7: agora o argumento final é MATCH TYPE. Precisamos de uma correspondência exata, portanto, insira o valor do argumento como zero.

Código:

 Sub Match_Example1 () Range ("E2"). Value = WorksheetFunction.Match (Range ("D2"). Value, Range ("A2: A10"), 0) End Sub 

Execute a macro e obteremos a posição de qualquer nome do ano que esteja na célula D2.

Exemplo # 2 - VBA Match de outra planilha

Suponha que o mesmo conjunto de dados acima esteja em duas planilhas diferentes. Por exemplo, a matriz da tabela está no nome da folha chamada “Folha de dados” e o valor de pesquisa está lá no nome da folha chamado “Folha de resultados”.

Nesse caso, precisamos nos referir às planilhas por seu nome antes de nos referirmos aos intervalos. Abaixo está o conjunto de códigos com nomes de planilhas.

Código:

 Sub Match_Example2 () Sheets ("Result Sheet") .Range ("E2"). Value = WorksheetFunction.Match (Sheets ("Result Sheet") .Range ("D2"). Value, Sheets ("Data Sheet"). Intervalo ("A2: A10"), 0) End Sub 

Exemplo # 3 - Função de correspondência VBA com loops

Se o resultado que queremos em uma única célula, não há problema, mas se o resultado tiver que vir em mais de uma célula, então precisamos usar um loop VBA para obter o resultado em todas as células.

Suponha que você tenha dados como este.

Nestes casos, é uma tarefa hercúlea escrever códigos longos, então mudamos para loops. Abaixo está o conjunto de códigos que fará o trabalho para nós.

Código:

 Sub Match_Example3 () Dim k As Integer For k = 2 To 10 Cells (k, 5) .Value = WorksheetFunction.Match (Cells (k, 4) .Value, Range ("A2: A10"), 0) Next k End Sub 

Este conjunto de códigos obterá o resultado em apenas um piscar de olhos.