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

Forumthread: Application.Match mit zwei Kriterien?

Application.Match mit zwei Kriterien?
23.08.2018 18:48:34
Michael
Hallo Zusammen,
mit Application.Match ermittele ich die Zeile eines Datensatzes zur weiteren Bearbeitung.
Jetzt ist jedoch notwendig, eine weitere Spalte nach einem zweiten Kriterium zu durchsuchen, um die Zeile des Datensatzes zu ermitteln.
Alle meine Versuche, über die Syntax ein zweites Kriterium zu integrieren, scheiterten.
Ist das überhaupt möglich? Oder gibt es zu Application.Match eine Alternative, die beim ersten Treffer die weitere Suche einstellt?
Vielen Dank und Gruß
Michael
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Application.Match mit zwei Kriterien?
23.08.2018 19:01:55
Werner
Hallo Michael,
meines Wissens nach nicht.
Aber was hindert dich denn daran ein zweites Match mit deinem zweiten Suchbegriff auf die zweite Spalte zu machen?
Gruß Werner
AW: Application.Match mit zwei Kriterien?
23.08.2018 19:09:10
Michael
Hallo Werner,
vielen Dank für Deine Antwort.
Da beide Treffer in der selben Zeile liegen müssen, sollte ein zweiter Suchlauf kein Ergebnis bringen.
Gruß Michael
Anzeige
AW: Application.Match mit zwei Kriterien?
23.08.2018 19:27:17
Matthias
Moin!
ICh verstehe zwar noch nicht ganz, was du wie suchen willst, aber warum nutzt du nicht die .find Methode? Da könntest du nach dem ersten Treffer eine neue Suche in einer anderen Zelle in Anhängigkeit vom TReffer suchen.
Alternativ beschreibe mal bitte, wie / was du suchen willst (Schritt für Schritt).
VG
Anzeige
Beschreibung
23.08.2018 19:37:53
Michael
Hallo Matthias,
ich suche in einer Datenbank die Zeile eines Datensatz, bei dem die Kundennummer und der Ort den beiden Suchkriterien entsprechen. Wenn ein Datensatz gefunden wurde und die Zeilennummer in eine Variable geschrieben wurde, soll die Suche beendet werden.
Gruß Michael
Anzeige
AW: Beschreibung
23.08.2018 20:21:50
Robert
Hallo Michael,
als Formellösung würde mir eine Formel mit Summenprodukt einfallen. In VBA eingebaut sieht das in etwa so aus (angenommen die Kunden-Nr stehen in der Spalte A und der Ort in der Spalte C):
Sub SucheZeile()
Dim KundenNr As Integer, Ort As String, Zeile As Long, lZ As Long
'letzte Zeile mit Daten bestimmen
lZ = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
'Suchkriterien festlegen
KundenNr = 10
Ort = "Köln"
Zeile = Evaluate("=SUMPRODUCT((A1:A" & lZ & "=" & KundenNr & ")*(C1:C" & lZ & "=""" & Ort & """) _
*ROW(A1:A" & lZ & "))")
Debug.Print Zeile
End Sub

Als Ergebnis enthält die Variable Zeile die Zeilen-Nr., in der beide Bedingungen (Kunden-Nr und Ort) erfüllt sind. Werden die Bedingungen in keiner Zeile erfüllt, ist der Wert der Variablen Zeile 0.
Gruß
Robert
Anzeige
gute Lösung / Performanz ?
23.08.2018 20:45:55
Michael
HAllo Robert,
vielen Dank für Deine Lösung.
Ich werde es morgen an der Original-DB testen. Da ich über 100.000 Datensätze habe, macht mir die Performanz ein wenig Sorgen.
Darum dachte ich an eine Lösung, die bei einem Treffer die weitere Suche abbricht.
Aber jetzt habe ich eine Lösung parat und das ict das wichtigste.
Gruß
Michael
Anzeige
AW: gute Lösung / Performanz ?
23.08.2018 21:22:45
Robert
Hallo Michael,
mit der Perfomance bei so vielen Datensätze hatte ich auch meine Bedenken, aber das musst Du natürlich am Original testen. Ich habe hier mal einen Datenbereich von A1:Z109990 mit Daten befüllt. Mit meiner Kiste hier dauert ein einmaliger Durchlauf des Makros unter 0,15 Sekunden. Wenn die Zeilen-Nr. nicht mehrfach in dem Makro gesucht werden muss, sollte die Dauer noch vertretbar sein.
Gruß
Robert
Anzeige
AW: gute Lösung / Performanz ?
24.08.2018 13:17:29
Daniel
Hi
wenn du eine schnelle Berechnung brauchst weil
a) die Quelldatenbank sehr viele Zeilen hat
b) du sehr viele Berechungen dieser Art durchführen musst,
kannst du so vorgehen:
1. in der Quelldatenbank eine Hilfsspalte einfügen, in welcher du die beiden Suchbegriffe zu einem zusammenführst, z.B. durch Verketten mit "&"
2. die Quelldatenbank nach dieser Hilfsspalte aufsteigend sortieren
3. zur Suche in der Hilfsspalte die Funktion Vergleich / Application.Match mit drittem Parameter = 1 verwenden und dann den Wert mit Index auslesen (Wenn du die Hilfsspalte links von der Zielspalte einfügst, kannst du auch den SVerweis verwenden, um den Wert direkt auszulesen.
das ist das schnellste, weil Vergleich/SVerweis hier auf grund der Sortierung die binäre Suche verwenden kann, welche bei großen Datenmengen um Welten schneller ist als die normale Listensuche für unsortierte Listen.
Gruß Daniel
Anzeige
Prima!
24.08.2018 17:01:15
Michael
Hallo Daniel,
vielen Dank für Deinen Vorschlag. Eine wirklich prima Idee!
Die Hilfsspalte werde ich in der Tabelle anlegen. Über eine normale Formel (auch in der Tabelle) ermittele ich die Zielzeile und übergebe den Wert in ein eine Variable im Makro.
Vielen Dank und Gruß
Michael
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Anwendung von Application.Match mit zwei Kriterien in VBA


Schritt-für-Schritt-Anleitung

Um in Excel VBA mit der Application.Match-Methode zwei Kriterien zu berücksichtigen, kannst du folgendermaßen vorgehen:

  1. Definiere die Suchkriterien: Bestimme die Werte, nach denen du suchen möchtest (z.B. Kundennummer und Ort).

  2. Nutze eine Hilfsspalte: Füge eine neue Spalte in deinem Arbeitsblatt hinzu, in der du die beiden Suchkriterien zusammenführst. Das kannst du z.B. durch die Verkettung der Werte tun:

    =A2 & " " & C2
  3. Verwende die Application.Match-Funktion: Verwende die Application.Match-Funktion auf diese Hilfsspalte. Hier ist ein Beispiel, wie du dies in VBA umsetzen kannst:

    Sub SucheMitZweiKriterien()
       Dim Suchbegriff As String
       Dim Zeile As Variant
       Dim KundenNr As Integer
       Dim Ort As String
    
       KundenNr = 10
       Ort = "Köln"
       Suchbegriff = KundenNr & " " & Ort
    
       Zeile = Application.Match(Suchbegriff, Range("D:D"), 0) ' D:D ist die Hilfsspalte
    
       If Not IsError(Zeile) Then
           MsgBox "Datensatz gefunden in Zeile: " & Zeile
       Else
           MsgBox "Datensatz nicht gefunden."
       End If
    End Sub

Häufige Fehler und Lösungen

  • Fehler 1: #N/A wird zurückgegeben.
    Lösung: Überprüfe, ob die Hilfsspalte korrekt gefüllt ist und ob die Suchkriterien in der richtigen Form vorliegen.

  • Fehler 2: Keine Übereinstimmung gefunden.
    Lösung: Stelle sicher, dass die Werte in der Hilfsspalte genau übereinstimmen, einschließlich Leerzeichen und Groß-/Kleinschreibung.


Alternative Methoden

Falls Application.Match nicht die gewünschte Leistung bringt, kannst du die .Find-Methode verwenden. Damit kannst du gezielt nach dem ersten Treffer suchen und die Suche dann beenden. Hier ein Beispiel:

Sub SucheMitFind()
    Dim ws As Worksheet
    Dim Suchbereich As Range
    Dim Treffer As Range
    Dim KundenNr As Integer
    Dim Ort As String

    Set ws = ThisWorkbook.Sheets("Tabelle1")
    Set Suchbereich = ws.Range("A:C") ' Angenommene Spalten A bis C

    KundenNr = 10
    Ort = "Köln"

    Set Treffer = Suchbereich.Find(What:=KundenNr, LookIn:=xlValues, LookAt:=xlWhole)

    If Not Treffer Is Nothing Then
        If Treffer.Offset(0, 2).Value = Ort Then ' Prüfe den Ort in der dritten Spalte
            MsgBox "Datensatz gefunden in Zeile: " & Treffer.Row
        End If
    Else
        MsgBox "Datensatz nicht gefunden."
    End If
End Sub

Praktische Beispiele

Ein einfaches Beispiel, um die Anwendung von Application.Match in einer Datenbank zu demonstrieren:

Angenommen, du hast eine Datenbank mit Kundennummern in Spalte A und Orten in Spalte C. Du könntest die Hilfsspalte D verwenden, um beide Kriterien zu kombinieren. Verwende dann die oben beschriebenen Methoden, um die gesuchte Zeile zu finden.


Tipps für Profis

  • Verwende die Evaluate-Funktion: Das kann die Performance verbessern, besonders bei großen Datenmengen.
  • Daten sortieren: Wenn du Daten sortierst, kann die Application.Match-Methode schneller arbeiten, da sie eine binäre Suche statt einer linearen Suche verwendet.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Situationen elegant zu handhaben.

FAQ: Häufige Fragen

1. Kann ich Application.Match mit mehr als zwei Kriterien verwenden?
Ja, du kannst mehrere Hilfsspalten erstellen und die Werte zusammenführen. Alternativ kannst du auch komplexere Formeln oder VBA verwenden.

2. Was ist der Unterschied zwischen Match und Find?
Match gibt die Position eines Wertes zurück, während Find ein Range-Objekt zurückgibt, das den gefundenen Wert enthält. Find bietet mehr Flexibilität und Optionen.

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