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

vba Application.Match

Forumthread: vba Application.Match

vba Application.Match
09.03.2023 19:19:03
Timm
Hallo zusammen,
ich habe einen Kalender erstellt. Nun möchte ich ein Datum mit der Funktion Application.Match () suchen.
Hierzu mein Code:
Sub Kalender_eintrag_suchen()
Dim Kalender As Worksheet
Dim Suche as Variant
Dim Datum As Variant
Set Kalender = Tabelle9
'Datum, das gesucht werden soll
Datum = CDbl(Kalender.Cells(1, 2).Value)
'Der Kalender befindet sich im Bereich A2:G3
Suche = Application.Match(Datum, Kalender.Range("A2:G3"), 0)
End Sub
Leider führt mein Code zum Fehler2042.
Ändere ich den Suchbereich von A2:G3 auf A2:G2 funktioniert der Code.
Was muss ich ändern, damit die Suche klappt?
Danke vorab.
Gruß
Timm
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: vba Application.Match
09.03.2023 19:36:40
onur
Keine Ahnung, ich kenne deine Datei nicht.
AW: vba Application.Match
09.03.2023 19:54:52
Yal
Hallo Timm,
wenn es eine Datum ist, spricht ohne Nachkommastellen, solltest Du Datum als Long deklarieren, nicht als Double
(verwende "Code <pre><code>" und dein Code dazwischen, zwecks Lesbarkeit)
Sub Kalender_eintrag_suchen()
Dim Suche As Variant
'Der Kalender befindet sich im Bereich A2:G3
    Suche = Application.Match(CLng(Tabelle9.Cells(1, 2).Value), Tabelle9.Range("A2:G3"), 0)
End Sub
Ansonsten hat Onur recht: eine Datei wurde die Untersuchung wesentlich zielsicherer machen.
VG
Yal
Anzeige
AW: vba Application.Match
10.03.2023 20:47:03
Timm
Hallo Yal,
vielen Dank für den Hinweis bezüglich der Codelesbarkeit. Werde es mal mit Long versuchen. Falls es nicht funktioniert, lade ich eine Beispieldatei hoch.
Gruß
Timm
AW: vba Application.Match
10.03.2023 23:15:04
Timm
Hallo zusammen,
hier nun die Beispieldatei:
https://www.herber.de/bbs/user/158223.xlsm
Die Deklaration als Long führt zum gleichen Fehler (Fehler 2042).
Kann man mit Application.Match() überhaupt einen Bereich durchsuchen?
Oder kann nur eine Spalte oder eine Zeile durchsucht werden?
Gibt es eine andere Funktion mit der die Suche funktioniert?
Von der Funktion find wurde mir abgeraten, in Zusammenhang mit der Suche nach einem Datum.
Gruß Timm
Anzeige
AW: vba Application.Match
11.03.2023 18:20:13
GerdL
...Oder!
Sub Unit()
    Dim r As Long, X As Variant
    
    For r = 2 To 3
        If WorksheetFunction.CountA(Rows(r), CLng(Cdate(Range("B1")))) Then
            Application.Goto Cells(r, Application.Match(CLng(CDate(Range("B1"))), Rows(r), 0))
            Exit For
        End If
    Next
End Sub
Gruß
Anzeige
AW: vba Application.Match
12.03.2023 23:26:16
Timm
Hallo GerdL,
vielen Dank für deine Hilfestellung.
Aufgrund der Tatsache, dass du mir eine Lösung per Schleife vorschlägst gehe ich davon aus das Application.Match () tatsächlich nur in einer Spalte oder Zeile suchen kann und nicht in einem Bereich.
Oder?
Gruß
Timm
AW: vba Application.Match
13.03.2023 06:49:20
GerdL
Hallo Timm!
Ja.
Gruß Gerd
Anzeige
AW: vba Application.Match
13.03.2023 23:32:17
Timm
Hallo Gerd,
danke für die Klarstellung. Wieder was dazu gelernt.
Gruß
Timm
;
Anzeige

Infobox / Tutorial

Anwendung von Application.Match in VBA


Schritt-für-Schritt-Anleitung

Um die Application.Match Funktion in VBA erfolgreich zu verwenden, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste im Projektfenster und wähle Einfügen > Modul.

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

    Sub Kalender_eintrag_suchen()
       Dim Kalender As Worksheet
       Dim Suche As Variant
       Dim Datum As Long
       Set Kalender = Tabelle9
    
       ' Datum, das gesucht werden soll
       Datum = CLng(Kalender.Cells(1, 2).Value)
    
       ' Der Kalender befindet sich im Bereich A2:G3
       Suche = Application.Match(Datum, Kalender.Range("A2:G3"), 0)
    
       If IsError(Suche) Then
           MsgBox "Datum nicht gefunden."
       Else
           MsgBox "Datum gefunden in Zeile: " & Suche
       End If
    End Sub
  4. Führe die Subroutine aus: Klicke auf F5, um den Code auszuführen.


Häufige Fehler und Lösungen

  • Fehler 2042: Dieser Fehler tritt auf, wenn Application.Match kein Ergebnis findet. Stelle sicher, dass das gesuchte Datum im richtigen Format vorliegt und im definierten Bereich vorhanden ist.
  • Suchbereich: Achte darauf, dass Application.Match nur in einer Zeile oder Spalte nach einem Wert suchen kann. Wenn du einen Bereich von Zellen (z.B. A2:G3) verwendest, kann dies zu einem Fehler führen. Verwende stattdessen eine einzelne Zeile oder Spalte.

Alternative Methoden

Wenn Application.Match nicht die gewünschten Ergebnisse liefert, kannst du folgende Alternativen ausprobieren:

  • For-Each-Schleife: Suche manuell durch die Zellen. Beispiel:

    Sub SucheMitSchleife()
       Dim r As Long
       Dim Datum As Long
       Datum = CLng(Tabelle9.Cells(1, 2).Value)
    
       For r = 2 To 3
           If Not IsError(Application.Match(Datum, Tabelle9.Rows(r), 0)) Then
               MsgBox "Datum gefunden in Zeile: " & r
               Exit Sub
           End If
       Next r
       MsgBox "Datum nicht gefunden."
    End Sub
  • WorksheetFunction.Find: Diese Methode kann ebenfalls genutzt werden, jedoch ist sie nicht optimal für die Suche nach Datumswerten.


Praktische Beispiele

  1. Beispiel mit einem Datum: Wenn du ein Datum suchst, das in Zelle B1 steht, und dein Kalender in A2:G3 ist:

    Sub BeispielMatch()
       Dim Suche As Variant
       Dim Datum As Long
       Datum = CLng(Tabelle9.Cells(1, 1).Value)
       Suche = Application.Match(Datum, Tabelle9.Range("A2:A3"), 0)
       MsgBox "Gefunden in Zeile: " & Suche
    End Sub
  2. Beispiel für mehrere Zeilen: Wenn du den gesamten Bereich durchsuchen möchtest, verwende eine Schleife wie oben gezeigt.


Tipps für Profis

  • Verwende die richtige Datentyp-Deklaration: Wenn du mit Datumswerten arbeitest, ist es besser, Long anstelle von Double oder Variant zu verwenden. Dies kann helfen, Fehler zu vermeiden.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Fehler abzufangen und die Benutzerfreundlichkeit zu erhöhen.
  • Verwende die IsError Funktion: Diese Funktion hilft dir, zu überprüfen, ob Application.Match ein gültiges Ergebnis liefert oder nicht.

FAQ: Häufige Fragen

1. Kann ich mit Application.Match einen Bereich durchsuchen?
Nein, Application.Match kann nur in einer Spalte oder einer Zeile suchen. Für mehrere Zeilen oder Spalten solltest du eine Schleife verwenden.

2. Warum bekomme ich immer wieder den Fehler 2042?
Dieser Fehler tritt auf, wenn das gesuchte Datum nicht im angegebenen Bereich gefunden wird. Überprüfe das Format des Datums und stelle sicher, dass es im Suchbereich vorhanden ist.

3. Gibt es eine Alternative zu Application.Match?
Ja, du kannst eine Schleife verwenden, um durch die Zellen zu iterieren, oder die WorksheetFunction.Find Methode, obwohl diese nicht ideal für Datumswerte ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige