Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Application.Match in mehrdimensionalem Array?

Application.Match in mehrdimensionalem Array?
09.06.2009 18:37:39
Andreas
Guten Abend zusammen,
ich habe schon im Forum gesucht, aber keinen Anhaltspunkt gefunden. In einem eindimensionalen Array ist die Application.Match Methode wunderbar geeignet, um das Vorkommen eines Wertes in dem Array zu prüfen. Als ich es für ein Mehrdimensionales Array (15 Zeilen/ 4 Spalten) probierte bekam ich einen „Fehler 2042“ wenn ich Application.Match über Debug.print schreiben ließ. Hat jemand von Euch damit Erfahrung? Ich habe schon versucht, die Dimension mitzugeben, in der gesucht werden soll, aber bekam einen Syntaxfehler.
Kann man diesen Befehl überhaupt in mehrdimensionalen Arrays verwenden?
Dank und Gruß, Andreas
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.Match in mehrdimensionalem Array?
09.06.2009 18:42:31
ransi
Hallo

Kann man diesen Befehl überhaupt in mehrdimensionalen Arrays verwenden?


Nee, dasgeht nicht.
Setz 2 geschachtelte Schleifen auf, eine über die Zeilen und eine über die Spalten.
Da vergleichst du jedes Element.
ransi

Anzeige
Das kann man schon mit 1er Fml auf der...
09.06.2009 19:15:36
Luc:-?
...Basis von VERGLEICH (Match) realisieren, Andreas,
aber nur, wenn die Werte einer Zeile mit " " als Trenner und Vor- und Nachsatz untereinander verkettet wdn. Dann kann mit "* suchwert *" im so entstandenen Spaltenvektor gesucht wdn. Problem ist dann nur noch die Spaltenidentifikation. Da du aber ohnehin mit VBA arbeitest, ist Ransis Vorschlag besser - ganz ohne Match. Die Laufvariablen geben dir dann Zeile und Spalte an, wenn du im Gefunden-Fall die Schleifen mit Exit For verlässt. Der NichtGefunden-Fall ist an den Indizes > Laufvariablen-Max erkenntlich.
Gruß Luc :-?
Anzeige
Formellösung: Position Suchbegriff in Matrix...
10.06.2009 00:28:00
Luc:-?
...auf der beschriebenen Basis in G163 (der Vollständigkeit halber)...
 
Userbild
Die Varianten in B163 und E163 basieren auf udFktt und sind deshalb hier nur zum Vgl enthalten (Bsp war ursprgl für einen anderen Zweck bestimmt).
Gruß an alle (späteren) Interessenten,
Luc :-?
Anzeige
AW: Application.Match in mehrdimensionalem Array?
09.06.2009 19:24:19
Uduuh
Hallo,
wenn du in einer bestimmten "Spalte" im Array suchst, reicht eine einfache Schleife über die "Spalte" (hier 3).

for i=1 to ubound(MeinArray)
if MeinArray(i, 3)="Suchwort" then exit for
next i
debug.Print iif(i


Gruß aus’m Pott
Udo

Anzeige
AW: Application.Match in mehrdimensionalem Array?
09.06.2009 19:27:00
Andreas
Hallo die drei fleißigen Antworter,
vielen Dank. Dann werd ich es so machen und über eine Schleife gehen. Es ist kein großes Array, von daher zeitlich noch im Rahmen. Hauptsache es läuft.
Habt noch einen schönen Abend. Grüße, Andreas
AW: Application.Match in mehrdimensionalem Array?
09.06.2009 19:39:23
Uduuh
Hallo,

Es ist kein großes Array, von daher zeitlich noch im Rahmen. 


das sowieso. Schleifen im Array sind selten zeitkritisch.
Gruß aus’m Pott
Udo

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Application.Match in mehrdimensionalem Array


Schritt-für-Schritt-Anleitung

  1. Array erstellen: Lege ein mehrdimensionales Array an, beispielsweise mit 15 Zeilen und 4 Spalten.

    Dim MeinArray(1 To 15, 1 To 4) As Variant
  2. Werte einfügen: Fülle das Array mit Werten. Dies kann manuell oder durch Schleifen geschehen.

    For i = 1 To 15
       For j = 1 To 4
           MeinArray(i, j) = "Wert" & i & j
       Next j
    Next i
  3. Suche durchführen: Verwende geschachtelte Schleifen, um in einem spezifischen Bereich des Arrays zu suchen. Application.Match kann hier nicht direkt verwendet werden, da es nur für eindimensionale Arrays funktioniert.

    Dim Suchwert As String
    Suchwert = "Wert12"
    Dim gefunden As Boolean
    gefunden = False
    
    For i = 1 To 15
       For j = 1 To 4
           If MeinArray(i, j) = Suchwert Then
               gefunden = True
               Exit For
           End If
       Next j
       If gefunden Then Exit For
    Next i
  4. Ergebnis ausgeben: Überprüfe das Ergebnis und gib eine entsprechende Meldung aus.

    If gefunden Then
       Debug.Print "Wert gefunden in Zeile " & i & ", Spalte " & j
    Else
       Debug.Print "Kein Array-Wert gefunden."
    End If

Häufige Fehler und Lösungen

  • Fehler 2042: Dieser Fehler tritt auf, wenn Application.Match auf ein mehrdimensionales Array angewendet wird. Verwende stattdessen geschachtelte Schleifen.
  • Syntaxfehler: Achte darauf, die Dimension des Arrays korrekt anzugeben. Ein falsches Array-Format führt oft zu Syntaxfehlern.
  • Kein Array-Wert gefunden: Stelle sicher, dass der Suchwert korrekt im Array eingegeben wurde und die Schleifen die richtigen Indizes überprüfen.

Alternative Methoden

Eine Alternative zur Verwendung von Application.Match ist die Implementierung von VBA Find zum Suchen in Arrays. Hierbei wird eine Funktion verwendet, die direkt nach einem Wert im Array sucht.

Function FindInArray(arr As Variant, value As Variant) As Boolean
    Dim i As Long, j As Long
    For i = LBound(arr, 1) To UBound(arr, 1)
        For j = LBound(arr, 2) To UBound(arr, 2)
            If arr(i, j) = value Then
                FindInArray = True
                Exit Function
            End If
        Next j
    Next i
    FindInArray = False
End Function

Praktische Beispiele

  • Beispiel 1: Suche nach einem spezifischen Wert in einem 2D-Array.
  • Beispiel 2: Implementiere die Suche innerhalb einer Funktion, die einen Boolean-Wert zurückgibt, um die Suche zu vereinfachen und wiederverwendbar zu machen.

Tipps für Profis

  • Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Nutze Debug.Print, um den Inhalt von Arrays während der Entwicklung zu überprüfen.
  • Berücksichtige die Performance: Bei großen Arrays kann die Suche durch geschachtelte Schleifen ineffizient werden. In solchen Fällen lohnt sich die Überlegung, die Datenstruktur zu optimieren.

FAQ: Häufige Fragen

1. Kann ich Application.Match in mehrdimensionalen Arrays verwenden?
Nein, Application.Match funktioniert nur mit eindimensionalen Arrays. Verwende stattdessen Schleifen.

2. Wie kann ich einen Wert in einem Array suchen?
Nutze geschachtelte Schleifen, um über die Zeilen und Spalten des Arrays zu iterieren und vergleiche die Werte.

3. Was mache ich, wenn kein Array-Wert gefunden wurde?
Überprüfe, ob der Suchwert korrekt eingegeben wurde und dass die Schleifen die richtigen Bereiche abdecken.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige