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

worksheetFunction Match geht nicht

Forumthread: worksheetFunction Match geht nicht

worksheetFunction Match geht nicht
05.11.2021 14:04:38
Basti
Hallo Zusammen,
beim Ausführen erscheint ein Fehler in der match funktion, weiß jemand woran es liegen könnte?:
Die Funktion soll zwei Tabellenblätter anhand einer Matchfunktion durchgehen und falls keine Übereinstimmung vorliegt in Tabelle A die entsprechende Zeile löschen.
'Code
Dim LZ2 As Integer
Dim infotext As String
Dim matchResult As Integer
infotext = " "
For LZ2 = FRow To 2 Step -1
matchResult = WorksheetFunction.IfError(WorksheetFunction.Match(Sheets("TabelleB").Cells(LZ2, 2), TabelleA.Range("B2:B" & FRow), 0), 0)
If matchResult = 0 Then
Worksheets("TabelleA").Rows(LZ2).EntireRow.Delete
End If
Next
Danke Vorab für Hilfestellungen.
Viele Grüße
Basti
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: worksheetFunction Match geht nicht
05.11.2021 14:11:42
Nepumuk
Hallo Basti,
teste mal:

For LZ2 = FRow To 2 Step -1
If IsError(Application.Match(Sheets("TabelleB").Cells(LZ2, 2), TabelleA.Range("B2:B" & FRow), 0)) Then _
Worksheets("TabelleA").Rows(LZ2).EntireRow.Delete
Next
Gruß
Nepumuk
AW: worksheetFunction Match geht nicht
05.11.2021 14:12:57
Daniel
HI
VBA kann nicht alles so ausführen, wie Formeln das können.
Auch wenn man über Worksheetfunction auf Excel-Funktionen zugreifen kann, muss man hier in der Programmierung immer noch die VBA-Regeln beachten und kann Formeln nicht immer 1:1 umsetzen (bspw kann VBA keine Matrixformeln auflösen, da muss man die Schleife selber programmieren).
in diesem Fall ist das einfachste, man verwendet nicht WorksheetFunction.Match, sondern Application.Match.
Das funktioniert genauso, erzeugt aber keinen Fehlerabbruch, wenn der Suchwert nicht gefunden wird, sondern gibt einen Fehler als Ergebnis aus.
Mit diesem Fehlerergebnis muss man natürlich richtig umgehen, sonst kommt dann spätestens hier der Fehler.
in deinem Fall:

Dim MatchResult as Variant
MatchResult = Application.Match(Sheets("TabelleB").Cells(LZ2, 2), TabelleA.Range("B2:B" & FRow), 0)
If VarType(Matchresult) = VbError then Worksheets("TabelleA").Rows(LZ2).EntireRow.Delete
oder verkürzt ohne Variable:

IF IsError(Application.Match(...)) Then ...
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fehlersuche bei der Anwendung der Match-Funktion in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne dein Excel-Dokument und wechsle in den VBA-Editor (Alt + F11).

  2. Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" > Einfügen > Modul).

  3. Kopiere den folgenden Code in das Modul:

    Dim LZ2 As Integer
    Dim FRow As Integer
    Dim matchResult As Variant
    FRow = Worksheets("TabelleB").Cells(Rows.Count, 2).End(xlUp).Row
    
    For LZ2 = FRow To 2 Step -1
       matchResult = Application.Match(Sheets("TabelleB").Cells(LZ2, 2), TabelleA.Range("B2:B" & FRow), 0)
       If IsError(matchResult) Then
           Worksheets("TabelleA").Rows(LZ2).EntireRow.Delete
       End If
    Next LZ2
  4. Stelle sicher, dass die Tabellenblätter "TabelleA" und "TabelleB" existieren und die Daten korrekt eingegeben sind.

  5. Führe den Code aus (F5), um die Zeilen in "TabelleA" zu löschen, die keine Übereinstimmung in "TabelleB" haben.


Häufige Fehler und Lösungen

  • Fehler: "Typen unverträglich"

    • Ursache: Die Variable matchResult sollte als Variant deklariert werden, um Fehlerwerte zu verarbeiten.
  • Fehler: "Objekt erforderlich"

    • Ursache: Überprüfe, ob die Tabellenblätter korrekt benannt sind. Ein Tippfehler kann diesen Fehler verursachen.
  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Ursache: Stelle sicher, dass der Bereich TabelleA.Range("B2:B" & FRow) korrekt definiert ist und die Zellen Daten enthalten.

Alternative Methoden

Eine alternative Methode zur Verwendung der Match-Funktion ist die Verwendung von VBA WorksheetFunction. Beachte jedoch, dass dies zu einem Laufzeitfehler führen kann, wenn der Suchwert nicht gefunden wird. Hier ein Beispiel:

Dim matchResult As Variant
matchResult = WorksheetFunction.Match(Sheets("TabelleB").Cells(LZ2, 2), TabelleA.Range("B2:B" & FRow), 0)
If IsError(matchResult) Then
    Worksheets("TabelleA").Rows(LZ2).EntireRow.Delete
End If

Die Verwendung von Application.Match wird empfohlen, da sie flexibler ist und Fehler besser handhaben kann.


Praktische Beispiele

Angenommen, du hast in "TabelleA" eine Liste von Kunden und in "TabelleB" eine Liste von Bestellungen. Du möchtest alle Kunden entfernen, die keine Bestellungen haben. Der obenstehende Code kann dies effizient erledigen.

Hier ist ein weiteres Beispiel, das die Verwendung von Application.worksheetfunction.index zeigt, um zu überprüfen, ob ein Wert existiert:

Dim indexResult As Variant
indexResult = Application.WorksheetFunction.Index(TabelleA.Range("B2:B" & FRow), matchResult)

Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Teste deinen Code Schritt für Schritt, um Fehler schneller zu identifizieren.
  • Nutze die Debug.Print-Anweisung, um den Wert von Variablen während der Ausführung zu überprüfen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Application.Match und WorksheetFunction.Match?
Application.Match gibt einen Fehler zurück, wenn der Wert nicht gefunden wird, während WorksheetFunction.Match einen Laufzeitfehler erzeugt.

2. Wie kann ich mehrere Übereinstimmungen in einem Bereich finden?
Du kannst eine Schleife verwenden, um die Match-Funktion für jeden Wert im Bereich auszuführen.

3. Ist die Match-Funktion auch in Excel-Formeln verfügbar?
Ja, die MATCH()-Funktion ist eine native Excel-Funktion, die auch in Formeln verwendet werden kann.

4. Wie gehe ich mit Fehlern um, die durch die Match-Funktion erzeugt werden?
Verwende IsError() oder IfError() in deinem Code, um sicherzustellen, dass der Code nicht abbricht, wenn der gesuchte Wert nicht gefunden wird.

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