VBA - Verifique se existe um valor em um array

VBA - Verifique se existe um valor em um array

Introdução

Para verificar se existe um valor em uma matriz, podemos percorrer seus elementos. No entanto, há outra solução! Você pode usar a função INDEX (), nativa do Excel e, no caso de matrizes bidimensionais, usar uma combinação da função ÍNDICE / CORRESP . No entanto, se o valor não for encontrado, Application.Match retornará um erro. Você precisará levar em conta quaisquer erros possíveis, bem como o número de dimensões da variável de matriz.

Esta pequena função irá ajudá-lo!

Usando a função Match

 Função EstDans (mot As String, Tabl) Como Boolean

Dim Dimensão como Byte, j As Integer

On Error Resume Next

Se IsError (UBound (Tabl, 2)) Então, Dimensão = 1 Outra Dimensão = 2

On Error GoTo 0

Selecione a dimensão do caso

Caso 1

On Error Resume Next

EstDans = Application.Match (mot, tabl, 0)

On Error GoTo 0

Caso 2

Para j = 1 para UBound (tabl, 2)

On Error Resume Next

EstDans = Application.Match (mot, Application.Index (Tabl,, j), 0)

On Error GoTo 0

Se EstDans = True, em seguida, sair para

Próximo

Selecionar final

Função final

Invocando a função

 Subteste ()

Dim Tb (), i As Integer

2 dimensões:

Tb = Range ("A2: C16"). Valor

Debug.Print EstDans (MaValeur, Tb)

Apagar Tb

1 dimensão:

ReDim Preserve Tb (15)

Para i = 0 a 14

Tb (i) = Células (i + 2, 1)

Próximo

Debug.Print EstDans (MaValeur, Tb)

End Sub

Usando um loop

A estrutura dessa função é semelhante à que usa Match .

 Função BoucleSurTabl (mot As String, Tb)

Dim Dimensão Como Byte, i Long, j As Long

On Error Resume Next

Se IsError (UBound (Tb, 2)) então dimensão = 1 outra dimensão = 2

On Error GoTo 0

Selecione a dimensão do caso

Caso 1

Para j = LBound (Tb) para UBound (Tb)

Se Tb (j) = mot Então BoucleSurTabl = True: Sair Função

Próximo

Caso 2

Para i = LBound (Tb, 1) para UBound (Tb, 1)

Para j = LBound (Tb, 2) para UBound (Tb, 2)

Se Tb (i, j) = mot Então BoucleSurTabl = True: Sair Função

J seguinte

Proximo eu

Selecionar final

Função final

Observações

Contra todas as probabilidades, você obterá um melhor resultado com a função de loop em matrizes grandes do que usando Application.Match.

Testando uma matriz bidimensional com o seguinte intervalo ("A1: Y20002").

  • Usando a função Match: 8.300781 segundos.
  • Usando o loop: 0, 4375 segundo.

Testando uma matriz unidimensional:

  • Usando a função Match: instant
  • Usando o loop: 0.015625 segundos

Baixar link

  • Você pode baixar a pasta de trabalho de amostra: //cjoint.com/?DHfpeqMBvRK
Artigo Anterior Próximo Artigo

Principais Dicas