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

Forumthread: Application.Match nur für eindimensionale Arrays?

Application.Match nur für eindimensionale Arrays?
Martin
Hallo,
mit "Application.Match(Suchwert,Array,0)" kann sehr schnell der Trefferindex in einem eindimensionalen Array ermittelt werden. Besteht die Möglichkeit "Application.Match(Suchwert,Array,0)" auch bei einem zweidimensionales Array (unter Angabe der zu durchsuchenden Dimension) anzuwenden?
Da das nur eine Frage aus persönlichem Interesse ist, brauche ich keine Alternativvorschläge. Für Antworten bin ich - wie immer - sehr dankbar!
Viele Grüße
Martin
Anzeige
geht nicht owT
02.02.2010 12:34:03
Rudi
Schade! Aber vielen Dank für die schnelle Antwort!
02.02.2010 12:36:20
Martin
s.o.
Im Prinzip hat Rudi recht, aber es gibt...
02.02.2010 13:20:47
Luc:-?
...einen Trick, Martin,
du musst ein 1dimensionales aus dem 2dimensionalen Feld machen, indem du es zeilen(- bzw spalten-)weise mit geeigneten Trennzeichen zusammenfasst und dann beim Suchbegriff mit Jokerzeichen * arbeitest, wenn das möglich ist.
Gruß Luc :-?
Anzeige
dann kann man ja gleich ...
02.02.2010 13:23:11
Rudi
...mit ner Schleife suchen. Was übrigens zeitlich unkritisch ist.
Gruß
Rudi
Für VBA ist das ja auch wirklich irrelevant,...
02.02.2010 13:28:22
Luc:-?
...Rudi,
aber um so interessanter für Formel-Puristen... ;-)
Gruß Luc :-?
In einer Formel ...
02.02.2010 13:43:16
Rudi
... arbeitet man nicht wirklich oft mit Application.Match, Luc.
Gruß
Rudi
Anzeige
Warum so bierernst? Ich arbeite NIE mit...
02.02.2010 14:08:23
Luc:-?
...Application.Match, Rudi,
stets mit WorksheetFunction.Match und in solchen Fällen meist mit PgmZyklen. Meine Antwort zielte auch über den VBA-Tellerrand hinaus, womit ich dir nicht unterstellen wollte, du würdest diese FmlLösung nicht kennen! Du musst mir aber nicht unterstellen wollen, ich hätte an der Aufgabenstellung vorbei geantwortet (kann mir auch mal passieren!)... Ob das Ganze auch unter VBA Sinn machen könnte, hängt ja letztendlich von der Datenmenge und der Schnelligkeit der jeweiligen xlRoutinen ab...
Für VBA gäbe es natürlich noch einen anderen Weg, aus einem 2dimensionalen ein 1dimensionales Feld zu machen...
Gruß Luc :-?
Anzeige
AW: Warum so bierernst? Ich arbeite NIE mit...
02.02.2010 14:53:37
Rudi
Hallo,
das sollte keine Kritik an dir sein.
Application.Match: Da sind wir genau unterschiedlich gepolt. Ich arbeite nie mit Worksheetfunction.Match, da dies bei Fehler einen Laufzeitfehler verursacht, hingegen Application.Match einen Fehlerwert zurück gibt.
Für VBA gäbe es natürlich noch einen anderen Weg, aus einem 2dimensionalen ein 1dimensionales Feld zu machen...

Du machst mich neugierig.
Gruß
Rudi
Anzeige
AW: Warum so bierernst? Ich arbeite NIE mit...
02.02.2010 15:33:45
wsp
WorksheetFunction.Match macht unter VBA folgenden Sinn :
in einer Funktion, die in einer Zellformel aufgerufen wird, gibt WorksheetFunction.Match eine brauchbare
Information - dagegen versagt irgendeinrange.cells.find ( What:= ... ) in diesem Kontext.
WSP
Siehste, und da ich fast nur udF für genau...
02.02.2010 19:15:44
Luc:-?
...diesen Einsatzzweck schreibe, WaSP,
habe ich Rudis Problem nicht, aber viell eher eines, wenn ich's anders machen würde... ;-)
Gruß Luc :-?
Anzeige
Ach, das ist nichts Besonderes,...
02.02.2010 19:36:59
Luc:-?
...Rudi... ;-)
Ich habe da so 'ne udF, die macht das eigentlich nur deshalb, weil ich damals zu faul war, mir die Mühe zu machen, die Elemente eines 2dimensionalen Feldes richtig anzuordnen. Da gibt's ja so Durchlauf­reihenfolge­unterschiede zwischen Xl u. VB — war mir damals zu viel, das auch noch zu berücksichtigen... (Nebenbei, die udF liefert einen Wertevektor in Form einer Matrixkonstanten → Einsatz in AUSWERTEN möglich.)
Interessanter finde ich die Möglichkeit, ein Feld aus 2 und mehr Vektoren paarig (und mehr) mit der Laufvariablen in For Each p In... durchlaufen zu können. Damit könnte man dann diese Paare (Gruppen) auch zusammenfassen (sogar mit Index): x(p(0)) = p(1) & ";" & p(2) & ";" p(3)...
Gruß Luc :-?
PS: Hatte nur 'nen Smilie vermisst; wäre deutlicher gewesen...
Anzeige
Danke, das ist eine interessante Lösung!
02.02.2010 13:24:01
Martin
s.o.
AW: Application.Match nur für eindimensionale Arrays?
02.02.2010 15:56:08
Beverly
Hi Martin,
meinst du so etwas:
Sub ArryAuslesen()
Dim arrDaten() As Variant
arrDaten = Array(Array("A", "B", "C", "D", "E"), Array(100, 200, 300, 400, 500))
MsgBox Application.Match("B", arrDaten(0), 0)
MsgBox Application.Match(500, arrDaten(1), 0)
End Sub



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
Anzeige

Infobox / Tutorial

Anwendung von Application.Match in VBA für Arrays


Schritt-für-Schritt-Anleitung

Um die Funktion Application.Match in VBA für eindimensionale Arrays zu verwenden, kannst du die folgende Vorgehensweise nutzen:

  1. Öffne den VBA-Editor in Excel (drücke ALT + F11).

  2. Erstelle ein neues Modul: Rechtsklick im Projektbereich > Einfügen > Modul.

  3. Füge den folgenden VBA-Code ein:

    Sub SucheImArray()
       Dim arrDaten() As Variant
       arrDaten = Array("A", "B", "C", "D", "E")
       Dim index As Variant
    
       index = Application.Match("C", arrDaten, 0) ' Suche nach "C"
    
       If Not IsError(index) Then
           MsgBox "Der Wert 'C' befindet sich an Index: " & index
       Else
           MsgBox "Wert nicht gefunden."
       End If
    End Sub
  4. Führe das Skript aus, um den Index des gesuchten Wertes zu erhalten.


Häufige Fehler und Lösungen

  • Fehler: "Typ nicht übereinstimmend"
    Dieser Fehler tritt auf, wenn der Suchwert nicht im richtigen Format vorliegt. Stelle sicher, dass der Suchwert und die Werte im Array vom gleichen Datentyp sind.

  • Fehler: "Wert nicht gefunden"
    Wenn Application.Match keine Übereinstimmung findet, gibt es einen Fehlerwert zurück. Verwende IsError, um dies abzufangen.

  • Problem mit mehrdimensionalen Arrays
    Application.Match funktioniert nur mit eindimensionalen Arrays. Um einen Wert in einem zweidimensionalen Array zu finden, musst du es zuerst in ein eindimensionales Array umwandeln oder die Schleife verwenden.


Alternative Methoden

Wenn du mit mehrdimensionalen Arrays arbeitest, gibt es Alternativen:

  1. Schleifen verwenden: Du kannst durch das Array iterieren und die Werte manuell vergleichen.

    For i = LBound(arrDaten, 1) To UBound(arrDaten, 1)
       If arrDaten(i, 0) = "Suchwert" Then
           ' Treffer gefunden
       End If
    Next i
  2. WorksheetFunction.Match: Verwende WorksheetFunction.Match, wenn du in einem Kontext arbeitest, der dies erfordert. Beachte jedoch, dass dies bei einem Fehler einen Laufzeitfehler auslöst.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du Application.Match in einem 2D-Array verwenden kannst:

Sub ArrayAuslesen()
    Dim arrDaten() As Variant
    arrDaten = Array(Array("A", "B", "C", "D", "E"), Array(100, 200, 300, 400, 500))

    MsgBox Application.Match("B", arrDaten(0), 0) ' Gibt den Index für "B" zurück
    MsgBox Application.Match(500, arrDaten(1), 0) ' Gibt den Index für 500 zurück
End Sub

Das obige Beispiel zeigt, wie du sowohl Strings als auch Zahlen in einem 2D-Array abfragen kannst.


Tipps für Profis

  • Verwende Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Laufzeitfehler zu vermeiden.

  • Optimierung durch Arrays: Wenn du häufig mit großen Datenmengen arbeitest, kann die Verwendung von Arrays die Performance deiner VBA-Programme erheblich verbessern.

  • Kombination von Funktionen: Nutze Application.Index zusammen mit Application.Match, um komplexe Datenabfragen zu realisieren.


FAQ: Häufige Fragen

1. Kann ich Application.Match in mehrdimensionalen Arrays verwenden?
Nein, Application.Match funktioniert nur mit eindimensionalen Arrays. Du musst mehrdimensionale Arrays zuerst umwandeln.

2. Was ist der Unterschied zwischen Application.Match und WorksheetFunction.Match?
Application.Match gibt einen Fehlerwert zurück, wenn kein Ergebnis gefunden wird, während WorksheetFunction.Match bei einem Fehler einen Laufzeitfehler auslöst.

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