VBA-Suche nach (Finden) Wert in Array

Dieses Tutorial zeigt, wie Sie in VBA nach einem Wert in einem Array suchen (finden).

Es gibt verschiedene Möglichkeiten, nach einem String in einem Array zu suchen - je nachdem, ob das Array eindimensional oder mehrdimensional ist.

Suchen in einem eindimensionalen Array

Um in einem eindimensionalen Array nach einem Wert zu suchen, können Sie die Filterfunktion verwenden.

123 Dim z als Variante'das ursprüngliche Array filternz = Filter(Array, String, True, vbCompareBinary)

Die Syntax der Filteroption ist wie folgt

Filter(Quell-Array, Übereinstimmung als String, [Als Boolean einschließen], [Vergleichen als vbCompareMethod])

Die Quell-Array und der Als String abgleichen sind erforderlich, während die Als Boolean einschließen und der Vergleichen Sie als vbCompareMethod sind optional. Wenn diese nicht enthalten sind, werden sie auf gesetzt Wahr und vbCompareBinary bzw.

Werte finden, die dem Filter entsprechen

1234567891011121314 Unter FindBob()'Array erstellenDim strName() als VariantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'eine Variante zum Speichern der Filterdaten deklarierenDim strSubNames als Variante'das ursprüngliche Array filternstrSubNames = Filter(strName, "Bob")'Wenn Ihr LBound-Wert größer als -1 ist, wurde der Wert gefundenIf LBound(strSubNames ) > -1 Then MsgBox ("Ich habe Bob gefunden")End Sub

Das zweite Array enthält die vom Filter gefundenen Werte. Wenn Ihre LBound- und UBound-Werte nicht -1 sind, hat das Array den gesuchten Wert gefunden.

Sie können auch sehen, wie oft der Text im ursprünglichen Array vorkommt.

1234567891011121314 Abonnenten CountNames()'Array erstellenDim strName() als VariantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklarieren Sie ein Array zum Speichern der Filterdaten inDim strSubNames als Variante'das ursprüngliche Array filternstrSubNames = Filter(strName, "Bob")'Wenn Sie die LBound von den UBound-Werten abziehen und 1 hinzufügen, erhalten wir die Anzahl der Vorkommen des TextesMsgbox UBound(strSubNames) - LBound(strSubNames) + 1 & "Namen gefunden."End Sub

Werte finden, die NICHT mit dem Filter übereinstimmen

Die [Als Boolean einschließen] Option können Sie herausfinden, wie viele Werte in Ihrem Array welche NICHT passen Sie Ihren Filter an

1234567891011121314 AbonnentenzählerExtraNames()'Array erstellenDim strName() als VariantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")'deklarieren Sie ein Array zum Speichern der Filterdaten inDim strSubNames als Variante'das ursprüngliche Array filternstrSubNames = Filter(strName, "Bob", False)'Wenn Sie die LBound von den UBound-Werten abziehen und 1 hinzufügen, erhalten wir die Anzahl der Vorkommen des TextesMsgbox UBound(strSubNames ) - LBound(strSubNames ) + 1 & "Namen gefunden."End Sub

wir haben daher diese Zeile geändert:

1 strSubNames = Filter(strName, "Bob")

mit dieser Zeile:

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

Die Verwendung dieser Zeile im Code würde alle Namen zurückgeben, die NICHT mit "Bob" übereinstimmen.

Groß-/Kleinschreibung empfindliche Filter

Sie werden feststellen, dass der Filter standardmäßig zwischen Groß- und Kleinschreibung unterscheidet. Dies gilt für alle VBA-Funktionen. Wenn Sie nach Text suchen möchten, bei dem die Groß-/Kleinschreibung nicht beachtet wird, müssen Sie Ihren Code geringfügig ändern.

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

Hinzufügen vbTextVergleichen zu Ihrer Filterzeile ermöglicht es Ihrem Code, "Bob" oder "Bob" zu finden. Wenn dies weggelassen wird, verwendet VBA standardmäßig vbBinaryVergleichen die nur nach Daten sucht, die ein GENAU Spiel. Beachten Sie, dass wir im obigen Beispiel die weggelassen haben [Als Boolean einschließen] Argument, so dass True angenommen wird.

Option Text vergleichen

Alternativ können Sie den Text hinzufügen Option Text vergleichen an den Anfang Ihres Moduls - dies macht alle Funktionen, die Sie in diesem speziellen Modul schreiben, unabhängig von der Groß-/Kleinschreibung.

Verwenden einer Schleife zum Durchsuchen eines Arrays

Die Verwendung einer Schleife ist etwas komplizierter als die Verwendung der Filterfunktion. Wir können eine Funktion erstellen, die alle Werte im Array durchläuft.

1234567891011121314151617 Sub LoopThroughArray()'Array erstellenDim strName() als VariantestrName() = Array("Bob Smith", "John Davies", "Fred Jones", "Steve Jenkins", "Bob Williams")Dim strFind as stringstrFind = "Bob"Dim ich so lang'Schleife durch das ArrayFür i = LBound(strName, 1) Zu UBound(strName, 1)Wenn InStr(strName(i), strFind) > 0 ThenMsgBox "Bob wurde gefunden!"Beenden fürEnde WennAls nächstesEnd Sub

Um einen Teil der Textzeichenfolge zu finden, zB „Bob“ statt „Bob Smith“ oder „Bob Williams“, mussten wir die Instr-Funktion in der If-Anweisung verwenden. Dies suchte in der Zeichenfolge, die von der Schleife vom Array zurückgegeben wurde, um zu sehen, ob "Bob" in der Zeichenfolge enthalten war, und wie es in der Zeichenfolge war, gab es eine Meldungsbox zurück und beendete dann die Schleife.

Suchen in einem mehrdimensionalen Array

Wir verwenden die Schleife auch, um ein mehrdimensionales Array zu durchsuchen. Auch hier müssen wir eine Funktion erstellen, die es uns ermöglicht, alle Werte im Array zu durchlaufen, aber diesmal müssen wir auch jede Dimension des Arrays durchlaufen.

123456789101112131415161718192021222324252627 Funktion LoopThroughArray()Dim varArray() als VarianteDim strFind As StringstrFind = "Arzt"'Größe des Arrays angebenReDim varArray(1, 2)'Array initialisierenvarArray(0, 0) = "Mel Smith"varArray(0, 1) = "Fred-Schnalle"varArray(0, 2) = "Jane Eyre"varArray(1, 0) = "Buchhalter"varArray(1, 1) = "Sekretär"varArray(1, 2) = "Arzt"'Variablen für die Schleife deklarierenDim i As Long, j As Long'Schleife für die erste DimensionFür i = LBound(varArray, 1) Zu UBound(varArray, 1)'Schleife für die zweite DimensionFür j = LBound(varArray, 2) Zu UBound(varArray, 2)'wenn wir den Wert finden, dann msgbox, um zu sagen, dass wir den Wert haben und die Funktion verlassenWenn varArray(i, j) = strFind ThenMsgBox "Arzt wurde gefunden!"Exit-FunktionEnde WennNächstes jAls nächstesEndfunktion
wave wave wave wave wave