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

Forumthread: In 2D-Array suchen

In 2D-Array suchen
07.05.2021 16:49:39
W
Hallo Forum,
ich erhalte aus einer Funktion heraus eine 2-D-Array. im Element(0.x) stehen verschiedene Begriffe. In den Elementen(y,x) stehen die zugehörigen Werte.
Beispiel:
Arr(0,0) = "Alfa"
Arr(0,1) = "Beta"
Arr(0,2) = "Gamma"
Arr(1,0) = 7
Arr(1,2) = 11
Arr(2,7) = 47
Arr(3,2) = 0
Sowohl Stufe 1 als auch Stufe 2 sind variabel; Stufe 2 hat aktuell 57 Elemente. Das kann sich aber jederzeit ändern..
Wie kann ich ohne Loop die aktuelle Position für "Beta" (also: 1) finden, um dann die vorhandenen Werte in Arr(x,Position) auslesen zu können.
ich hoffe, ich habe das verständlich beschrieben.
Gruß Werner
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In 2D-Array suchen
07.05.2021 17:03:46
Daniel
Hi
Bei Arrays kann man eigentlich problemlos mit Schleifen arbeiten, die sind sehr schnell.
Die die einzige Suchfunktion in VBA für Arrays ist Application.Match (entspricht Vergleich).
Die sucht in eindimensionalen Arrays und in zweidimensionalen, wenn diese in einer Dimension nur einen Index haben (einteilig oder einspaltig).
Wenn du weist, in welcher Spalte oder Zeile du suchen willst, kannst du diese mit Worksheetfunction.Index herauslösen
Worksheetfunction.Index(Art, 1, 0) gibt dir die erste Zeile des Arrays zurück.
Wobei hier die 0 für "alle Spalten" steht und die 1 für "erste Zeile, unabhängig von der Indizierung des Arrays.
Das kannst du dann mit Match durchsuchen und dir auch wieder die Positionsnummer der Fundstelle zurück geben lassen.
Gruß Daniel
Anzeige
AW: In 2D-Array suchen
07.05.2021 17:08:38
W
Hallo Daniel,
vielen Dank für Deine Antwort. Mein Problem: ich habe (noch) nicht das Wissen, Deine Worte in VBA-Code umzusetzen.
Wie also könnte ich die Position von "Beta" finden?
Gruß Werner
AW: In 2D-Array suchen
07.05.2021 17:26:10
Daniel
Hi
wenn du weißt, dass du in der ersten Zeile suchen musst:

Application.Match("Beta", Application.Index(arr, 1, 0), 0)
Gruß Daniel
Anzeige
AW: In 2D-Array suchen
07.05.2021 17:36:18
W
Hallo Daniel,
Danke. Passt und funktioniert.
Schönes Wochenende.
Gruß Werner
;

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
Anzeige

Infobox / Tutorial

In 2D-Array suchen in Excel VBA


Schritt-für-Schritt-Anleitung

Um in einem Excel 2D-Array zu suchen, kannst Du die Application.Match-Funktion in Verbindung mit Application.Index verwenden, um die Position eines Wertes zu bestimmen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Erstelle ein 2D-Array: Definiere ein Array mit den gewünschten Werten.

    Dim Arr(3, 2) As Variant
    Arr(0, 0) = "Alfa"
    Arr(0, 1) = "Beta"
    Arr(0, 2) = "Gamma"
    Arr(1, 0) = 7
    Arr(1, 1) = 13
    Arr(1, 2) = 11
    Arr(2, 0) = 47
    Arr(2, 1) = 5
    Arr(2, 2) = 0
  2. Verwende Application.Index: Um die erste Zeile des Arrays zu extrahieren.

    Dim Position As Variant
    Position = Application.Match("Beta", Application.Index(Arr, 1, 0), 0)
  3. Lese den Wert aus: Jetzt kannst Du den gefundenen Wert basierend auf der Position auslesen.

    If Not IsError(Position) Then
       MsgBox "Der Wert an der Position ist: " & Arr(1, Position)
    Else
       MsgBox "Wert nicht gefunden."
    End If

Häufige Fehler und Lösungen

  • Fehler: "Wert nicht gefunden" wird angezeigt.

    • Lösung: Stelle sicher, dass der gesuchte Wert im Array vorhanden ist und dass die Schreibweise korrekt ist.
  • Fehler: "Typen unverträglich".

    • Lösung: Überprüfe, ob die Variablen korrekt deklariert sind. Manchmal kann es helfen, das Array als Variant zu deklarieren, um Typkonflikte zu vermeiden.

Alternative Methoden

Eine alternative Methode ist die Verwendung von Schleifen, um das Array zu durchsuchen. Obwohl dies nicht die effizienteste Methode ist, kann sie in bestimmten Situationen nützlich sein, besonders wenn Du mehr Kontrolle benötigst.

Dim i As Integer
Dim gefunden As Boolean
gefunden = False

For i = LBound(Arr, 2) To UBound(Arr, 2)
    If Arr(0, i) = "Beta" Then
        MsgBox "Wert gefunden in Position: " & i
        gefunden = True
        Exit For
    End If
Next i

If Not gefunden Then
    MsgBox "Wert nicht gefunden."
End If

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du die oben genannten Methoden in realen Szenarien verwenden kannst:

  1. Zusammenführen von Zellinhalten: Wenn Du mehrere Werte aus einer Spalte in einem Array speichern und später zusammenführen möchtest, kannst Du die Positionen der Werte leicht finden.

  2. Dynamische Arrays: Wenn Du ein Excel VBA Array durchsuchen möchtest, das sich basierend auf Benutzereingaben ändert, kannst Du die Application.Match-Methode effizient nutzen.


Tipps für Profis

  • Verwende Option Explicit: Stelle sicher, dass alle Variablen deklariert sind, um Fehler zu vermeiden.
  • Nutze Debugging: Verwende Debug.Print, um die Werte während der Ausführung zu überprüfen.
  • Optimierung: Wenn Du oft mit großen Arrays arbeitest, erwäge, Dein Array in ein Dictionary zu konvertieren, um die Suche zu beschleunigen.

FAQ: Häufige Fragen

1. Wie kann ich ein 2D-Array in VBA erstellen?
Du kannst ein 2D-Array in VBA mit der Dim-Anweisung erstellen, z.B. Dim Arr(3, 2) As Variant.

2. Was ist der Unterschied zwischen Application.Match und Application.Find?
Application.Match wird verwendet, um den Index eines Wertes in einem Array zu finden, während Application.Find in einem Bereich von Zellen in einem Arbeitsblatt gesucht wird.

3. Kann ich die Match-Funktion auch in mehrdimensionalen Arrays verwenden?
Ja, allerdings nur in einer Dimension. Bei mehrdimensionalen Arrays musst Du zuerst die gewünschte Dimension mit Application.Index isolieren.

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