Du weißt, dass du alt wirst, wenn in einem Horrorfilm nervige Teenager umgebracht werden und du den Mörder verstehen kannst.

Erstaunlich. In einem Bereich stehen Datumsangaben. In einer Zelle steht eine andere Datumsangabe. Sie soll „gesucht“ werden. Weder ZÄHLENWENN noch VERGLEICH haben ein Problem damit:

Auch der VBA-Befehl CountIf

datDatum = ThisWorkbook.Worksheets(1).Range("F19").Value
MsgBox Application.WorksheetFunction.CountIf(ThisWorkbook.Worksheets(1).Range("F1:F16"), datDatum)

arbeitet problemlos. Allerdings liefert MATCH einen Fehler:

Der Befehl

Application.WorksheetFunction.Match(datDatum, ThisWorkbook.Worksheets(1).Range("F1:F16"), 0)

klappt nicht.

Auch nicht in:

Application.WorksheetFunction.Match(ThisWorkbook.Worksheets(1).Range("F19").Value, _
   ThisWorkbook.Worksheets(1).Range("F1:F16"), 0)

Wahrscheinlich ist die Ursache folgende: Excel kennt nur die Datentypen Text und Zahl, während VBA verschiedene Datentypen für Zahlen kennt (Integer, Long, Double, …), aber auch für Datum (Date).

Also: Flux den Wert der Variablen datDatum in eine Long-Zahl konvertieren (CLng(datDatum) ) – und schon klappt es wieder:

Application.WorksheetFunction.Match(CLng(datDatum), ThisWorkbook.Worksheets(1).Range("F1:F16"), 0)

Menschen, die mich vor 9 Uhr fragen, wie es mir geht, schauen auch mit dem Streichholz nach, ob noch Benzin im Tank ist.

Na, ein bisschen mehr Mühe hätte sich VBA schon geben können:

Anwendungs- oder objektorientierter Fehler. Na toll! Und wo? Und was?

Der Debugger hilft: die Berechnung Row – 8 ergibt einen falschen, nämlich negativen Wert (falsch gerechnet; nicht aufgepasst!) – so kann die Zelle „C-1“ nicht ermittelt werden.

Auch hier: Typen unverträglich!

Ey, VBA: sag mir doch deutlich, dass ich Dumpfbacke bei der Funktion MATCH (VERGLEICH) die beiden Parameter vertauscht habe. Während die Funktion der Zeile darüber (COUNTIF, ZÄHLENWENN) die Parameter ich suche wo wen verlangt, ermittelt MATCH / VERGLEICH: ich suche wen wo. Und keiner hilft mir! *lach*