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

WorksheetFunction.Match

Forumthread: WorksheetFunction.Match

WorksheetFunction.Match
01.05.2008 11:48:20
Sonnenpeter
Hallo,
ich versuche mit der WorksheetFunction.Match die Zeilennummer zu erfahren.
(Bewusst nicht mit Find)
Müsste doch so gehen?

Sub Vergleiche()
SDatum = Format(Date, "ddd.dd.mm.yyyy")
Test = WorksheetFunction.Match(SDatum, Sheets("Datum").Range("A:A"), 0)
End Sub


Leider erhalte ich eine Fehlermeldung Match kann nicht zugewiesen werden.
Gruß SP

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: WorksheetFunction.Match
01.05.2008 11:59:15
Uduuh
Hallo,
nimm Application.match. test wird zwar zu einem Fehler, aber das Prog läuft weiter.

Sub Vergleiche()
SDatum = Format(Date, "ddd.dd.mm.yyyy")
Test = Application.Match(SDatum, Sheets("Datum").Range("A:A"), 0)
If iserror(test) then
msgbox" nicht da"
else
msgbox "in Zeile" &test
end if
End Sub


Gruß aus’m Pott
Udo

Anzeige
AW: WorksheetFunction.Match
01.05.2008 12:16:14
Sonnenpeter
Hallo Udo,
erst mal Danke für den neuen Ansatz, dass Datum ist definitiv da, trotzdem bekomme ich nicht die Zeilennummer sondern einen Fehler.
Kann das am Datumsformat liegen?
Gruß aus Rheinhessen in den Pott / SP

Nachtra........
01.05.2008 12:17:00
Sonnenpeter
Hallo nochmal.
=VERGLEICH(HEUTE();A:A;0) funzt einwandfrei....
Gruß aus Rheinhessen in den Pott / SP

Anzeige
AW: Nachtra........
01.05.2008 12:21:10
Daniel
Hi
lad doch mal deine Daten hoch, damit man was testen kann.
es liegt nicht immer nur am Code, auch die Daten dazu sind wichtig um den Fehler zu finden.
Gruß, Daniel

SDatum ist ein Variant, der vermutlich...
01.05.2008 12:34:00
Luc:-?
...wg der Pktt als Text interpretiert wird, Peter.
HEUTE() liefert eine Zahl! Mit Date ohne Format sollte es bei entsprechender Deklaration und analogen Daten fkt. Verwende Option Explicit!
Gruß Luc :-?
PS: Application direkt mit einer WshFct wird nicht empfohlen. WorksheetFunction als Eigenschaft von Application... (→ kann entfallen) ist exakter!

Anzeige
Erledigt...
01.05.2008 12:42:47
Sonnenpeter
Danke für eure Unterstützung :-)
So funzt es
Option Explicit

Sub Vergleiche()
Dim SDatum As Long
Dim Test As Long
SDatum = Format(Date, 0)
Test = Application.Match(SDatum, Sheets("Feiertage").Range("A:A"), 0)
Test = WorksheetFunction.Match(SDatum, Sheets("Feiertage").Range("A:A"), 0)
End Sub


Gruß SP

Anzeige
AW: @Luc
01.05.2008 18:16:00
Gerd
Hi Luc,
das entscheidene bei dieser Konstellation war, dass der Suchbereich aus Datevalues= Long-Werten
bestand.
........Worksheetfunctions nicht empfohlen.....
Diese sind immerhin hinreichend dokumentiert u. u. U. genauso schnell wie die entspechende
VBA-Methode.
Gruß Gerd

Anzeige
...das habe ich nicht gemeint,...
01.05.2008 23:19:00
Luc:-?
...Gerd!
Lies mal genau, was ich geschrieben habe: Ich meinte Application.fktsname... Und dass das, was du schreibst, der Grund war, konnte ich mir auch ohne Dateieinsicht denken, denn auch ein Datum ist ein Zahlenwert! Ein Datum ist aber dann kein Zahlenwert mehr, wenn man es mit Format herkömmlich formatiert und dann einer Variablen vom Typ Variant übergibt. Die Variable enthält dann einen Variant vom Untertyp String. Dem hat Peter Rechnung getragen, indem er jetzt auf eine Zahl formatiert hat.
Gruß Luc :-?

Anzeige
AW: ...das habe ich nicht gemeint,...
02.05.2008 00:23:00
Gerd
Hallo Luc,
ob mit Format oder Convert, da stimme ich dir natürlich zu.
Nur ist es halt viel einfacher, den Suchbegriff richtig zu deklarieren,
wenn man weis, welcher Variablentyp erforderlich ist.
Zum anderen Thema:
Application. , Application.Worksheetfunction bzw. Worksheetfunction
Hier ist das Gleiche offenbar nicht immer das Selbe.
Falls es dich interessiert:
http://www.online-excel.de/fom/fo_read.php?f=1&bzh=-1&h=26645&ao=1
Gruß Gerd

Anzeige
...eben, und genau deshalb wird auch nur...
02.05.2008 01:41:00
Luc:-?
...Application von MS nicht empfohlen, Gerd,
obwohl es möglich ist!
Gruß Luc :-?
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Anwendung der WorksheetFunction.Match in Excel VBA


Schritt-für-Schritt-Anleitung

Um die WorksheetFunction.Match in Excel VBA zu verwenden und die Zeilennummer eines bestimmten Wertes zu finden, folge dieser Anleitung:

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

  2. Erstelle ein neues Modul (Rechtsklick auf "Module" > "Einfügen" > "Modul").

  3. Füge den folgenden Code ein:

    Sub Vergleiche()
       Dim SDatum As String
       Dim Test As Variant
       SDatum = Format(Date, "ddd.dd.mm.yyyy")
       Test = Application.WorksheetFunction.Match(SDatum, Sheets("Datum").Range("A:A"), 0)
       If IsError(Test) Then
           MsgBox "Nicht gefunden"
       Else
           MsgBox "In Zeile " & Test
       End If
    End Sub
  4. Stelle sicher, dass das Datum im Format "ddd.dd.mm.yyyy" in der angegebenen Spalte vorhanden ist.

  5. Führe das Makro aus, um die Zeilennummer zu erhalten.


Häufige Fehler und Lösungen

  • Fehlermeldung "Match kann nicht zugewiesen werden": Nutze Application.Match anstelle von WorksheetFunction.Match, wenn du die Zeilennummer direkt zuweisen möchtest.

  • Fehler bei der Datumsformatierung: Achte darauf, dass das Datum als Zahl interpretiert wird. Verwende Format(Date, 0) anstelle von Format(Date, "ddd.dd.mm.yyyy"), wenn du mit reinen Datumswerten arbeitest.

  • Variable Typ: Stelle sicher, dass die Variable für das Datum als Variant oder String deklariert ist, um die Fehleranfälligkeit zu minimieren.


Alternative Methoden

Eine Alternative zur Verwendung von WorksheetFunction.Match ist die direkte Verwendung von Application.Match. Hier ein Beispiel:

Sub VergleicheAlternative()
    Dim SDatum As String
    Dim Test As Variant
    SDatum = Format(Date, 0)
    Test = Application.Match(SDatum, Sheets("Datum").Range("A:A"), 0)
    If IsError(Test) Then
        MsgBox "Nicht gefunden"
    Else
        MsgBox "In Zeile " & Test
    End If
End Sub

Diese Methode kann in manchen Fällen schneller und weniger fehleranfällig sein.


Praktische Beispiele

Hier sind zwei praktische Beispiele, um die Anwendung von Match besser zu verstehen:

  1. Datum suchen: Wenn du das aktuelle Datum in einer Liste von Feiertagen suchen möchtest:

    Sub SucheFeiertag()
       Dim Test As Variant
       Dim Feiertag As String
       Feiertag = Format(Date, 0)
       Test = Application.WorksheetFunction.Match(Feiertag, Sheets("Feiertage").Range("A:A"), 0)
       MsgBox "Feiertag gefunden in Zeile: " & Test
    End Sub
  2. Verwendung von WorksheetFunction.Match: Um die Zeilennummer eines Wertes in einer anderen Tabelle zu finden:

    Sub SucheWert()
       Dim Test As Variant
       Test = WorksheetFunction.Match("Suchwert", Sheets("Daten").Range("B:B"), 0)
       MsgBox "Wert gefunden in Zeile: " & Test
    End Sub

Tipps für Profis

  • Nutze Option Explicit, um alle Variablen zu deklarieren. Dies hilft, Fehler zu vermeiden.
  • Achte darauf, dass du die richtigen Datentypen verwendest, um die Performance zu optimieren.
  • Verwende IsError, um Fehler bei der Suche zu behandeln und die Benutzererfahrung zu verbessern.
  • Bei großen Datenmengen ist es oft schneller, die Match-Funktion in VBA anstelle von Excel-Formeln zu verwenden.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Application.Match und WorksheetFunction.Match? Application.Match wird direkt auf die Anwendung angewendet, während WorksheetFunction.Match eine spezifische Excel-Funktion darstellt, die in VBA genutzt wird. Beide können ähnliche Ergebnisse liefern, jedoch kann Application.Match in bestimmten Kontexten weniger fehleranfällig sein.

2. Warum erhalte ich einen Fehler bei der Verwendung von Match mit Datumswerten? Das kann an der Datumsformatierung liegen. Stelle sicher, dass das Datum im richtigen Format vorliegt und als Zahl interpretiert wird. Verwende Format(Date, 0) für eine präzise Zahlendarstellung.

3. Wie kann ich sicherstellen, dass meine Suche effizient ist? Optimiere deine Daten, indem du sicherstellst, dass der Suchbereich nicht zu groß ist, und deklariere Variablen korrekt. Verwende zudem Option Explicit, um Fehler durch nicht deklarierte Variablen zu vermeiden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige