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

37.12.04 ->>> FALSCHES DATUM MELDEN!

Forumthread: 37.12.04 ->>> FALSCHES DATUM MELDEN!

37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:16:35
Dante
Hallo Ihr Excel-Könner,

ich stehe vor dem Problem, dass Excel z.B. den 37.12.03 oder den 44.03.04 als richtigs Datum erkennt.
Ich dachte, dass ich mit IsDate() dir Richtigkeit von Datum checken könnte, aber es funktioniert nicht.

Gibt es eine andere Funktion, die die Plausibilität eines Datums überprüft?!

Vielen Dank Euch allen - Dante
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:24:03
hecht
Ich weiß ja nicht wozu die Kontrolle dient, jedoch kann man über die Menüleiste in "Daten\Gültigkeit" eine Datumseingabe festlegen und wenn diese nicht eingehalten wird kann eine Fehlermeldung gerneriert werden...
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:38:19
Dante
Hey "hecht",

das wird leider nicht funktionieren, da ich die Überprüfung dynamisch ausführen muss...
Ist brauche also irgendeinen Datumscheck in VBA!

Hast Du noch ne Idee?

Gruß,
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:24:17
Gert Seler
Hallo Tante,
kontrolliere erst einmal das Format der Zellen, warscheinlich sind die Zellen
mit Text formatiert.
mfg
Gert
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:36:21
Dante
Hallo Gert,

nein, die Zellen sind formatiert: Benutzerdefiniert TT.MM.JJJJ
Ist das nicht eindeutig ein Datum?
Bzw. müsste IsDate() hier nicht funktionieren??

Gruß,
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:35:23
M@x
Hi Dante,
ein derartig falsches Datum wandelt Excel automatisch in tEXT UM;
man könnte zBsp eine abfrage mit ISTZAHL() machen

Gruss

M@x
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:40:28
Dante
Hallo M@x,

aber was macht istZahl() mit z.B. 34.14.2005 ?
Bzw. was sagt mir dann das Ergebnis?

Gruß,
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:50:28
M@x
Hi Dante,
das Ergebnis ist "falsch", d.h. keine Zahl uns somit kein reales Datum,
man kann das ja über die Wennabfrage mit entsprechendem Text "Bitte Datum richtig eingeben" koppeln.
Das Prinzipielle Manko bdieser Fehlerabfrage: wenn du statt 31.12.2003 zBsp 30.11.2004 eingibst , wird das natürlich nicht als Falscheingabe erkannt

Gruss

M@x
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:59:50
Dante
Hallo M@x,

1) ist istZahl() das gleiche wie isNumeric() (ich hab die englische Version...)
2) wenn ja, dann funktioniert das leider nicht, denn richtige Daten z.B. 12.03.2004 werden nicht als Zahl erkannt

Dante...
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 17:00:06
M@x
Hi Dante,
mit der engl Version kenn ich mich nicht asu.
füer Excel ist ja intern ein Datum eine fortlaufende Zahl.
und sofern ein richtiges Datum kein Text ist, funktioniert das mit ISTZAHL() bei mir.
schau mal ob du das Datum überhaupt als Zahl formaatieren kannst, da ergibt der 31.12.2003 37986 sofern du Datumbasis 1.1.1900 hast

Gruss

M@x
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:40:33
Dante
Hallo M@x,

aber was macht istZahl() mit z.B. 34.14.2005 ?
Bzw. was sagt mir dann das Ergebnis?

Gruß,
Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:41:22
Nayus
Hi,
das Problem taucht auf, wenn in einer Zelle, die nicht als Datum formatiert ist so ein ungültiges Datum eingetragen wird. Hier wird dann eine Datumzahl generiert.
Da kann man sich mit Hilfe der folgenden Prüfung behelfen.
Ist die Zelle schon mit einem Datumsformat versehen, funktioniert auch isDate().

Viel Erfolg,
Nayus


Sub pruefe_datum()
' Teste A6 (unformatierte Zelle, die z.B. 32.12.04 enthält)
If Format(Sheets("Sheet1").Cells(6, 1), "dd.mm.yyyy") = _
CStr(Day(Sheets("Sheet1").Cells(6, 1))) & "." & _
CStr(Month(Sheets("Sheet1").Cells(6, 1))) & "." & _
CStr(Year(Sheets("Sheet1").Cells(6, 1))) Then
MsgBox "Datum"
Else
MsgBox "kein Datum"
End If
End Sub

Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:02:30
Dante
Hallo Nayus,

die Zellen sind alle formatiert als Datum (Benutzerdefinert: TT.MM.YYYY), aber isDate() liefert mir trotzdem für alle meine Testwerte (z.B. 33.18.04 oder 12.56.2003 ...)FALSE zurück.

... Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:08:26
Nayus
Hi Dante,
FALSE ist ja auch richtig! Das ist kein Datum.
Gruß,
Nayus
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:16:21
Dante
... hab mich verschrieben... tschuldige...

Es wird bei falschen Werten TRUE zurückgegeben, obwohl die Zellen als Datum (Benutzerdefiniert TT.MM.JJJJ) formatiert sind?!

Dante
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:33:56
Nayus
Hi,
also bei mir funktioniert das.
Testfall:
1. Zelle, Datim 31.12.2003
Zelle formatiert (TT.MM.JJJJ)

Autofüllen über die nächsten Zellen
Datum in einer Zelle auf 32.12.2003 geändert

In benachbarter Spalte folgende Funktion aufgerufen mit dem Datum als Argument.
Ergebnis: Für alle gültigen Datumswerte => TRUE , 32.12.2003 => FALSE


Function pruefe_datum(pval As Variant) As Boolean
Dim l_ret As Boolean
l_ret = False
If IsDate(pval) Then
l_ret = True
End If
pruefe_datum = l_ret
End Function


Verstehe nicht, warum das bei Dir nicht klappt (amkopfkratz***)

Gruß,
Nayus
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:45:52
Dante
Hallo...

das hier ist ist mein Code:
-----------------------------------------------------------------------------------------
If IsDate(Cells(a, b)) Then
MsgBox Cells(a, b) & "ist Datum"
Else
MsgBox "Fehlerhaftes Datum in Zeile " & a & " , Spalte: " & Cells(2, b) & "." & Chr(13) & "Das Datum ist falsch formatiert oder nicht existent."
Exit Sub
End If
-----------------------------------------------------------------------------------------

Die Zellen über die die Schleife läuft sind w.g. formatiert.
Format TT.MM.YYYY
Wenn jetzt ein Datum eingegeben wird, die Jahreszahl allerdings nur 2-stellig ist, dann erkennt Excel das und ergänzt die Jahreszahl (20.12.03 -> 20.12.2003)

Wenn ich aber ein falsches Datum (34.15.03) eingebe, dann merkt Excel schon, dass irgendwas nicht stimmt, denn es wird nichts geänder und bleibt so in der Zelle stehen.
IsDate(Zelle in der der falsche Wert steht) liefert aber trotzdem TRUE ?!

Ich weiß echt nicht weiter...
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 16:11:01
Andreas Rost
Hallo Dante,

du hast in deinen Programm, nicht nach den Wert gefragt.

die 1.Zeile sollte so lauten:
If IsDate(Cells(a, b).value) Then

gruss

Andreas
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 16:45:08
Dante
Hallo Andreas,

mit der .Value - Ergänzung ändert sich leider gar nichts... Der 35.16.03 ist immer noch ein gültiges Datum - hurra....

Trotzdem danke,
Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 14:55:00
Thomas Ramel
Grüezi Dante

IsDate() funktioniert nur korrekt, wenn die Jahreszahl 4-stellig angegeben wird; ansonsten kann es pssieren, dass aus ja nch Kombination von Tag/Monat/Jahr eine andere Zusammensetzugn generiert wird, die zufällig wieder ein Datum ist.
Ich habe mich unlängst mit diesem Phänomen auseinandergesetzt und auch festgestellt, dass unterschiedliche Ländereinstllungen ebenfalls eine Rolle spielen.
Daher habe ich mit anderen zusammen die folgende Funktin entwickelt, die für alle deutschen Ländereinstllungen funktionieren müsste:



Public Function IstDatum(strDatum As String) As Boolean
'ab xl97
Dim intTag     As Integer
Dim intMonat   As Integer
Dim intJahr    As Integer
Dim strDelim   As String
Dim AWF        As WorksheetFunction
Set AWF = Application.WorksheetFunction
On Error GoTo Errorhandler
If VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, ".", "")) = 2 Then
strDelim = "."
ElseIf VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, "-", "")) = 2 Then
strDelim = "-"
ElseIf VBA.Len(strDatum) - VBA.Len(AWF.Substitute(strDatum, "/", "")) = 2 Then
strDelim = "/"
Else
'IstDatum = False
Exit Function
End If
intTag = CInt(VBA.Left(strDatum, InStr(1, strDatum, strDelim) - 1))
intMonat = CInt(VBA.Mid(strDatum, InStr(1, strDatum, strDelim) + 1, InStr(InStr(1, strDatum, strDelim) + 1, strDatum, strDelim) - InStr(1, strDatum, strDelim) - 1))
intJahr = CInt(VBA.Mid(strDatum, InStr(InStr(1, strDatum, strDelim) + 1, strDatum, strDelim) + 1, 4))
If intMonat > 12 Then Exit Function
IstDatum = Month(DateSerial(intJahr, intMonat, intTag)) = Month(DateSerial(intJahr, intMonat, 1))
Errorhandler:
'Da im Falle eines Fehlers Istdatum nicht 'Wahr' sein kann, reicht es einfach ans Ende der Sub zu springen ;-)
End Function


Code eingefügt mit: Excel Code Jeanie

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 15:11:17
Dante
Hallo Thomas,

danke für diese zweifelsfrei tolle Fuktion...
mein Problem ist leider, dass die Datums nicht als String formatiert sein dürfen, da schon zu viele andere Makros mit diesen Datumswerten rechnen...

Ich brauche leider eine Abfrage, die sowas macht wie:
Nehme den Wert und speichere die Zahlen zwischen den Punkten in den Variablen Tag, Monat, Jahr. Dann könnte ich mir die Abfrage irgendwie basteln.
Zwar umständlich, da ja die ganzen 28./29./30./31.-Problematik abgefragt werden müsste aber funktionieren würde es zumindest...

Sowas hast du nicht zufällig auch in petto ??

Trotzdem nochmal danke für die Funktion!

Dante
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
26.11.2003 09:03:49
Thomas Ramel
Grüezi Dante

Dann wandle das Datum für die Prüfung in einen String um.
Wie greifst Du im Moment auf das Datum zu?
Eine Textbox?
Eine Tabellenzelle?

Istdatum(Range("A1").Text)

...kann schon genügen

Mit freundlichen Grüssen

Thomas Ramel
- MVP für Microsoft-Excel -
[Win 2000Pro SP-4 / xl2000 SP-3]
Anzeige
AW: 37.12.04 ->>> FALSCHES DATUM MELDEN!
25.11.2003 19:45:34
bernhard
hallo dante,
die einfachste variante wäre wohl, die worksheetfunktion zu verwenden, zb:


Sub dat()
a = 1: b = 1: stdtxt = " kein " 'Datum steht in A1
If WorksheetFunction.IsNumber(Cells(a, b)) Then stdtxt = " ein "
MsgBox "Zelle " & UCase(Chr(64 + b)) & a & " ist" & stdtxt & "Datum!"
End Sub


mfg
bernhard
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Falsche Datumsangaben in Excel überprüfen und korrigieren


Schritt-für-Schritt-Anleitung

  1. Zellenformat überprüfen: Stelle sicher, dass die Zellen, in denen die Daten eingegeben werden, als Datum formatiert sind. Klicke mit der rechten Maustaste auf die Zelle und wähle "Zellen formatieren". Wähle das Format "Datum" und stelle sicher, dass es auf TT.MM.JJJJ eingestellt ist.

  2. VBA-Funktion erstellen: Verwende die folgende VBA-Funktion, um die Gültigkeit eines Datums zu prüfen:

    Function IstDatum(pval As Variant) As Boolean
        Dim l_ret As Boolean
        l_ret = False
        If IsDate(pval) Then
            l_ret = True
        End If
        IstDatum = l_ret
    End Function
  3. Datumsüberprüfung durchführen: Führe die Funktion in einer Schleife über die relevanten Zellen aus. Beispiel:

    Sub PruefeDaten()
        Dim a As Integer
        For a = 1 To 10 ' Überprüfe die ersten 10 Zeilen
            If Not IstDatum(Cells(a, 1).Value) Then
                MsgBox "Fehlerhaftes Datum in Zeile " & a
            End If
        Next a
    End Sub

Häufige Fehler und Lösungen

  • Falsches Datum wird akzeptiert: Wenn Excel ein falsches Datum wie 37.12.03 akzeptiert, liegt es oft daran, dass die Zelle nicht richtig formatiert oder als Text interpretiert wird. Überprüfe das Zellenformat und stelle sicher, dass es auf "Datum" eingestellt ist.

  • IsDate() gibt TRUE zurück: Wenn IsDate() TRUE zurückgibt, obwohl das Datum ungültig ist, könnte das an der Art der Eingabe liegen. Stelle sicher, dass das Datum im richtigen Format eingegeben wird.


Alternative Methoden

  • Datenvalidierung nutzen: Gehe zu "Daten" > "Datenvalidierung". Setze die Eingabebedingung auf "Datum" und definiere den erlaubten Bereich, um sicherzustellen, dass nur gültige Datumsangaben eingegeben werden.

  • WorksheetFunction verwenden: Eine einfache Methode ist die Verwendung der IsNumber()-Funktion, um zu überprüfen, ob die Zelle ein Datum enthält:

    Sub CheckDatum()
        If WorksheetFunction.IsNumber(Cells(1, 1)) Then
            MsgBox "Das Datum ist gültig."
        Else
            MsgBox "Kein gültiges Datum."
        End If
    End Sub

Praktische Beispiele

  • Überprüfung einer Zelle: Nutze die Funktion IstDatum() um eine einzelne Zelle zu überprüfen:

    Sub TestDatum()
        If IstDatum(Cells(1, 1).Value) Then
            MsgBox "Gültiges Datum"
        Else
            MsgBox "Ungültiges Datum"
        End If
    End Sub
  • Schleife über mehrere Zellen: Überprüfe mehrere Zellen in einer Spalte:

    Sub PruefeMehrereDaten()
        Dim i As Integer
        For i = 1 To 10
            If Not IstDatum(Cells(i, 1).Value) Then
                MsgBox "Ungültiges Datum in Zeile " & i
            End If
        Next i
    End Sub

Tipps für Profis

  • Jahreszahl formatieren: Achte darauf, dass die Jahreszahl vierstellig ist, um Probleme mit IsDate() zu vermeiden. Beispielsweise sollte 03 in 2003 umgewandelt werden.

  • Regionale Einstellungen beachten: Die Ländereinstellungen deines Excel-Programms können die Datumsinterpretation beeinflussen. Stelle sicher, dass deine Excel-Version die richtigen regionalen Einstellungen hat.


FAQ: Häufige Fragen

1. Warum akzeptiert Excel das Datum 37.12.03?
Excel interpretiert dies als Text, wenn die Zelle nicht korrekt formatiert ist. Überprüfe das Zellenformat und stelle sicher, dass es auf "Datum" eingestellt ist.

2. Wie kann ich sicherstellen, dass ein Datum korrekt eingegeben wird?
Verwende die Datenvalidierung in Excel, um nur gültige Datumsangaben zuzulassen. Alternativ kannst du eine VBA-Funktion wie IstDatum() einsetzen, um die Gültigkeit der Eingaben zu überprüfen.

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