Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Wert in zweidimensionelem Array suchen

Forumthread: Wert in zweidimensionelem Array suchen

Wert in zweidimensionelem Array suchen
24.12.2003 14:17:47
Lupus
Hallo Excel-User,

folgends Makro (Index 078099) gibt die "Zeilenposition" des gesuchten Strings innerhalb eines Arrays zurück:


Sub Durchsuchen()
Dim arr As Variant
Dim iRow As Integer
arr = Range("A1:A16")   '"Irgendwas" steht in Zelle A8
iRow = Application.Match("Irgendwas", arr, 0)
If Err > 0 Then
MsgBox "Nicht gefunden"
Else
MsgBox "An " & iRow & " .Stelle gefunden"
End If
End Sub


Wenn jedoch das Array aus dem Bereich Range("A1:E16") besteht und der zusuchende Begriff "Irgendwas" ursprünglich in Zelle E10 befand, kommt es zu einem Laufzeitfehler 13 (Typen unverträglich).

Der Code sieht jetzt folgendermaßen aus:

Sub Durchsuchen()
Dim arr As Variant
Dim iRow As Variant
arr = Range("A1:D16")
iRow = Application.Match("Irgendwas", arr, 0) 'Laufzeitfehler 13
If Err > 0 Then
MsgBox "Nicht gefunden"
Else
MsgBox "An " & iRow & " .Stelle gefunden"
End If
End Sub


Wie müßte der Code richtig lauten?

Was sagt das 3. Argument von macht aus? Habe in der Windowshilfe nichts gefunden.

Gruß Lupus
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wert in zweidimensionelem Array suchen
25.12.2003 01:29:58
Günther Abel
Hallo Lupus,

Match entspricht der Tabellenfunktion Vergleich
und funktioniert meines Erachtens (bin nicht ganz sicher)
nur in eindimensinalen Arrays (hier: spaltenweise) -
man müsste also die Spalten A-D einzeln in einer Schleife durchlaufen.

Die bessere Alternative wäre die Find-Methode,
dafür gibt es in der Online-Hilfe ein schönes Beispiel.
Achtung: Bei F1 auf find kann MS auch mal in der Tabfunktion landen -
also gezielt nach der Find-Methode suchen.

Viel Erfolg

Günther

P.S.: So sieht das Beispiel aus:

Beispiel zur Find-Methode

Dieses Beispiel findet alle Zellen im Bereich "A1:A500" des ersten Tabellenblatts, die den Wert 2 enthalten. Anschließend werden diese Zellen grau formatiert.

With Worksheets(1).Range("a1:a500")
Set c = .Find(2, lookin:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
c.Interior.Pattern = xlPatternGray50
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Anzeige
Lösung: Wert in 2-D Array suchen, aber ...
25.12.2003 13:02:22
Lupus
Hallo Günther,

danke für die Info, aber ich habe nach einer Möglichkeit gesucht Strings innerhalb eines Arrays zu suchen und nicht innerhalb eines Tabellenblattes. Die Daten für das Array kommen nicht aus einem Tabellenblatt, der Code (-> Range-Bereich) sollte nur zur Verdeutlichung meines Problems dienen.

Habe nun folgende, verbesserungswürdige jedoch schnell funktioniernde Lösung gefunden:

Option Explicit

Sub Durchsuchen()
Dim arr As Variant
Dim iRow As Integer, Zeile As Long, Spalte As Integer
arr = Range("A1:E32000") '.Value
For Zeile = 1 To 32000
For Spalte = 1 To 5
If "Irgendwas" = arr(Zeile, Spalte) Then  'stark optimierungswürdig
iRow = Zeile
End If
Next Spalte
Next Zeile
MsgBox "An " & iRow & ". Stelle gefunden"
End Sub


Da der Code in einer Userform eingebaut ist und der eigentliche Suchstring sich in einer Textbox befindet, würde ich lieber mit dem LIKE-Operator arbeiten, man könnte dann Wildcards in die Textbox mit eingeben.

Außerdem könnte es vorkommen, daß es mehrere Fundstellen gibt. Dann sollten die Datensätze, in denen sich der Suchstring befindet, in ein neues Array geschrieben werden bzw. in einer Combobox aufgelistet werden.

Wer Spaß am Tüfteln hat, kann mir / uns die lösung mal ins Forum stellen.

Ansonsten frohe Weihnachtstage

Gruß Lupus
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Wert in zweidimensionalem Array suchen


Schritt-für-Schritt-Anleitung

Um einen Wert in einem zweidimensionalen Array in Excel VBA zu suchen, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen. Diese Methode verwendet eine Schleife, um durch das Array zu iterieren und den gesuchten Wert zu finden.

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).
  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Kopiere und füge den folgenden Code ein:
Sub Durchsuchen()
    Dim arr As Variant
    Dim iRow As Long, Zeile As Long, Spalte As Long
    arr = Range("A1:E16").Value ' Definiere den Bereich für das Array
    Dim Suchwert As String
    Suchwert = "Irgendwas" ' Dein gesuchter Wert

    For Zeile = 1 To UBound(arr, 1)
        For Spalte = 1 To UBound(arr, 2)
            If Suchwert = arr(Zeile, Spalte) Then
                iRow = Zeile
                MsgBox "An " & iRow & ". Stelle gefunden"
                Exit Sub
            End If
        Next Spalte
    Next Zeile

    MsgBox "Nicht gefunden"
End Sub
  1. Ändere den Suchwert in der Zeile Suchwert = "Irgendwas" nach Bedarf.
  2. Führe das Makro aus, um den Wert im Array zu suchen.

Häufige Fehler und Lösungen

  • Laufzeitfehler 13 (Typen unverträglich): Dieser Fehler tritt auf, wenn du versuchst, einen Wert in einem nicht-eindimensionalen Array zu suchen. Stelle sicher, dass das Array korrekt definiert ist und dass du die richtigen Dimensionen verwendest.

  • "Nicht gefunden" Meldung: Dies bedeutet, dass der gesuchte Wert nicht im Array vorhanden ist. Überprüfe, ob der Wert tatsächlich im definierten Bereich enthalten ist.


Alternative Methoden

Eine alternative Methode zur Suche nach Werten in einem Array ist die Verwendung der Find-Methode, die effizienter ist, wenn du mit großen Datenmengen arbeitest. Hier ist ein Beispiel, wie du die Find-Methode in einem eindimensionalen Array verwenden kannst:

Sub FindWert()
    Dim arr As Variant
    Dim c As Range
    arr = Range("A1:A500").Value

    Set c = Application.WorksheetFunction.Match("Irgendwas", arr, 0)
    If Not IsError(c) Then
        MsgBox "Wert gefunden in Zeile: " & c
    Else
        MsgBox "Nicht gefunden"
    End If
End Sub

Diese Methode ist jedoch nur für eindimensionale Arrays geeignet.


Praktische Beispiele

Hier sind einige praktische Beispiele, die dir helfen können, die zuvor genannten Methoden besser zu verstehen:

  1. VBA Array durchsuchen: Suche nach einem bestimmten Wert in einem festgelegten Bereich.

  2. VBA Wert in Array suchen: Verwende die Schleifenmethode, um durch ein großes Array zu iterieren und einen Wert zu finden.

  3. Excel VBA Find Value in Array: Implementiere die Find-Methode für eindimensionale Arrays.


Tipps für Profis

  • Nutze den Like-Operator: Wenn du nach Mustern suchst, kann der Like-Operator in Kombination mit Wildcards nützlich sein.

  • Optimierung der Suche: Überlege, ob du die Daten in einem Dictionary oder Collection speichern kannst, um die Suche zu beschleunigen.

  • Fehlerbehandlung: Implementiere eine umfassende Fehlerbehandlung, um Laufzeitfehler zu vermeiden und dem Benutzer hilfreiche Informationen zu geben.


FAQ: Häufige Fragen

1. Wie kann ich mehrere Werte in einem Array suchen?
Du kannst eine Schleife verwenden, um durch das Array zu iterieren und alle Übereinstimmungen zu speichern.

2. Was ist der Unterschied zwischen Match und Find?
Match sucht einen Wert in einem eindimensionalen Array, während Find eine Zelle im Arbeitsblatt sucht, die einen bestimmten Wert enthält.

3. Wie kann ich die Leistung meiner Suche verbessern?
Vermeide unnötige Schleifen und nutze die Find-Methode für größere Datenmengen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige