Pesquisa VBA por (Encontrar) Valor na Matriz

Este tutorial demonstrará como pesquisar (encontrar) um valor em uma matriz no VBA

Existem várias maneiras de pesquisar uma string em uma matriz - dependendo se a matriz é unidimensional ou multidimensional.

Pesquisando em uma matriz unidimensional

Para pesquisar um valor em uma matriz unidimensional, você pode usar a Função de Filtro.

123 Dim z como variante'filtrar a matriz originalz = Filter (Array, String, True, vbCompareBinary)

A sintaxe da opção de filtro é a seguinte

Filter (Source Array, Match as String, [Include as Boolean], [Compare as vbCompareMethod])

o Matriz de Origem e a Match as String são necessários enquanto o Incluir como booleano e a Compare como vbCompareMethod são opcionais. Se eles não estiverem incluídos, eles serão definidos como Verdade e vbCompareBinary respectivamente.

Encontre valores que correspondam ao Filtro

1234567891011121314 Sub FindBob ()'Criar MatrizDim strNome () como variantestrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'declara uma variante para armazenar os dados do filtro emDim strSubNames como variante'filtrar a matriz originalstrSubNames = Filtro (strName, "Bob")'se seu valor LBound for maior que -1, então o valor foi encontradoIf LBound (strSubNames)> -1 Then MsgBox ("Encontrei Bob")End Sub

O segundo array conterá os valores encontrados pelo filtro. Se os valores LBound e UBound não forem -1, o array conseguiu encontrar o valor que você estava procurando.

Você também pode ver quantas vezes o texto aparece na matriz original.

1234567891011121314 Sub CountNames ()'Criar matrizDim strNome () como variantestrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'declara uma matriz para armazenar os dados do filtro emDim strSubNames como variante'filtrar a matriz originalstrSubNames = Filtro (strName, "Bob")'se você menos o LBound dos valores UBound e adicionar 1, obteremos o número de vezes que o texto apareceMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "nomes encontrados."End Sub

Encontre valores que NÃO correspondam ao filtro

o [Incluir como booleano] opção permite que você encontre quantos valores em sua matriz que NÃO combine seu filtro

1234567891011121314 Sub CountExtraNames ()'criar matrizDim strNome () como variantestrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'declara uma matriz para armazenar os dados do filtro emDim strSubNames como variante'filtrar a matriz originalstrSubNames = Filtro (strName, "Bob", False)'se você menos o LBound dos valores UBound e adicionar 1, obteremos o número de vezes que o texto apareceMsgbox UBound (strSubNames) - LBound (strSubNames) + 1 & "nomes encontrados."End Sub

portanto, alteramos esta linha:

1 strSubNames = Filtro (strName, "Bob")

com esta linha:

1 strSubNames = Filtro (strName, "Bob", False)

Usando esta linha no código, retornaria todos os nomes que NÃO correspondem a “Bob”.

Filtros que diferenciam maiúsculas de minúsculas

Você descobrirá que o filtro diferencia maiúsculas de minúsculas por padrão. Isso é verdadeiro para todas as funções do VBA. Se você quiser pesquisar um texto que não faça distinção entre maiúsculas e minúsculas, será necessário alterar um pouco seu código.

1 z = Filter (strName, "bob" ,, vbTextCompare)

Adicionando vbTextCompare à sua linha de filtro permitirá que seu código encontre “bob” ou “Bob”. Se for omitido, o VBA por padrão usa vbBinaryCompare que só procurará dados que sejam um EXATO partida. Observe no exemplo acima, deixamos de fora o [Incluir como booleano] argumento então True é assumido.

Texto de comparação de opções

Alternativamente, você pode adicionar o texto Texto de comparação de opções na parte superior do seu módulo - isso fará com que todas as funções que você escreve naquele módulo em particular não façam distinção entre maiúsculas e minúsculas.

Usando um loop para pesquisar em uma matriz

Usar um loop é um pouco mais complicado do que usar a função Filter. Podemos criar uma função que percorrerá todos os valores do array.

1234567891011121314151617 Sub LoopThroughArray ()'criar matrizDim strNome () como variantestrName () = Array ("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")Dim str Encontrar como stringstrFind = "Bob"Dim i enquanto'percorrer a matrizPara i = LBound (strName, 1) Para UBound (strName, 1)Se InStr (strNome (i), strFind)> 0 EntãoMsgBox "Bob foi encontrado!"Sair paraFim seProximo euEnd Sub

Para encontrar uma parte da string de texto, ou seja, “Bob” em vez de “Bob Smith” ou “Bob Williams”, precisamos usar a função Instr na instrução If. Isso olhou na string retornada pelo loop do Array para ver se “Bob” estava na string, e como estava na string, ele retornaria uma caixa de mensagem e então Saia do Loop.

Pesquisando em uma matriz multidimensional

Também usamos o loop para pesquisar uma matriz multidimensional. Mais uma vez, precisamos criar uma função que nos permita fazer um loop por todos os valores do array, mas, desta vez, também precisamos fazer um loop por cada dimensão do array.

123456789101112131415161718192021222324252627 Função LoopThroughArray ()Dim varArray () como varianteDim strFind As StringstrFind = "Doutor"'declara o tamanho da matrizReDim varArray (1, 2)'inicializar a matrizvarArray (0, 0) = "Mel Smith"varArray (0, 1) = "Fred Buckle"varArray (0, 2) = "Jane Eyre"varArray (1, 0) = "Contador"varArray (1, 1) = "Secretário"varArray (1, 2) = "Doutor"'declara variáveis ​​para o loopDim i As Long, j As Long'loop para a primeira dimensãoPara i = LBound (varArray, 1) Para UBound (varArray, 1)'loop para a segunda dimensãoPara j = LBound (varArray, 2) Para UBound (varArray, 2)'se encontrarmos o valor, então msgbox para dizer que temos o valor e sair da funçãoSe varArray (i, j) = strFind ThenMsgBox "O médico foi encontrado!"Função de saídaFim sePróximo jProximo euFunção Final

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave