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 BooleanDim 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