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

Forumthread: Variable als Datum deklariert

Variable als Datum deklariert
29.07.2007 19:33:00
reiner
Hallo Leute,
eine Variable ist „as date“ deklariert und erhält über eine CB das ausgewählte Datum nach welchem in der Tabelle gesucht werden soll. Das Datum wird in der Form „dd.mm.yyyy“ übergeben.
Testweise habe ich das Datum in der Datumsspalte in der Form „mm.dd.yyyy“ umgewandelt um anschließend einen Eintrag aus der CB (in dieser Form) an die Variable zu übergeben und danach suchen zu lassen.
Das funktioniert nur dann sinnvoll wenn die im Datum enthaltene Ziffernfolge für den Tag mindestens „13“ oder größer lautet. Bei einer Tageszahl zwischen „1“ und „12“ führt die Suche nicht zu dem erwarteten Ergebnis, dann wird die Ziffer wohl als Angabe eines Monats zwischen Januar und Dezember interpretiert.
Könnte es sein dass eine Variablendeklaration „as date“ immer die Form „dd.mm.yyyy“ unterstellt? Das wäre zumindest eine Erklärung für die z.T. unsinnigen Ergebnisse.
Kennt jemand eine Möglichkeit zur Variablendeklaration einer Datumsangabe in der Form „mm.dd.yyyy“?
mfg
reiner

Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Variable als Datum deklariert
29.07.2007 19:49:00
Renee
Mazwara Reiner,
Das Datum wird als IEEE 64-bit (8-byte) floating-point Nummer und nicht als String-Literal abgespeichert.
Darum kannst Du auch keinen Variable in der Form „mm.dd.yyyy“ deklarieren.
Du kannst nur einen sinnvollen String übergeben, der mit der Systemumgebung (Regional Settings) des Datumformats übereinstimmt. Mit der Formatierung der Zelle hat das Ganze nichts zu tun.
Schau Dir mal die Hilfe zum Date Datentyp in der VB-Umgebung an.
Greetz Renee

Anzeige
AW: Variable als Datum deklariert
29.07.2007 20:38:24
reiner
Hallo Renee,
wenn ich das Datumformat in der Systemumgebung in der Form "mm.dd.yyyy" deklariere funktioniert die Suche, allerdings gibt es dann Probleme wenn ich wieder in der vorigen Form "dd.mm.yyyy" deklariere.
Das heißt doch wohl dass die Suche nur dann sinnvoll erfolgen kann wenn das Datumsformat in der Tabellenspalte mit dem Datumformat in der Systemumgebung übereinstimmt.
Mit dieser Erkenntnis muss ich wohl abfinden, trotzdem danke ich dir für den Beitrag..
mfg
reiner

Anzeige
AW: Variable als Datum deklariert
29.07.2007 20:56:10
Renee
Hi Reiner,
Nein damit musst Du Dich nicht abfinden. Schliesslich sind auch die Zeiten in EXCEL Zellen im gleichen Format (nämlich als 8Byte Double Wert) abgelegt. In Deiner Spalte befinden sich nur visuell Datumsangaben, eigentlich sind alles Werte als eine Zahl ab 1 (1.1.1900) und z.B. Heute 39292 (29.07.2007).
Wenn Du also Deine Suche mit Zahlen statt Datumsangaben machst, müsste sie ebenso funktionieren und dann spielt die Darstellung bzw. Systemeinstellung überhaupt keinen Tango mehr.
Greetz Renee

Anzeige
AW: Variable als Datum deklariert
29.07.2007 21:14:51
reiner
Hallo Renee,
..z.B. Heute 39292 (29.07.2007)
wie sollte denn aber eine Datumsangabe 07.29.2007 als serielle Zahl aussehen (mm.dd.yyyy) das geht doch gar nicht oder?
reiner

AW: Variable als Datum deklariert
29.07.2007 21:18:33
Renee
Hi Reiner,
wie sollte denn aber eine Datumsangabe 07.29.2007 als serielle Zahl aussehen
sie sollte nicht, sie ist eben genau gleich, nämlich 39292 (29.07.2007 oder 07.29.2007 oder 2007-Jul-29 oder oder ... das sind nur Formatierungen), am Wert ändert sich absolut nix.
Greetz Renee

Anzeige
AW: Variable als Datum deklariert
29.07.2007 22:33:40
reiner
Hallo Renee,
egal wie das Datum formatiert ist, die serielle Zahl ist immer gleich, das ist so richtig?
Ich muss das ganze Problem nochmals überdenken, mit den bisherigen Vorschlägen komme ich leidre nicht weiter, dennoch vielen Dank
mfg
reiner

AW: Variable als Datum deklariert
29.07.2007 22:33:51
reiner
Hallo Renee,
egal wie das Datum formatiert ist, die serielle Zahl ist immer gleich, das ist so richtig?
Ich muss das ganze Problem nochmals überdenken, mit den bisherigen Vorschlägen komme ich leidre nicht weiter, dennoch vielen Dank
mfg
reiner

Anzeige
AW: Variable als Datum deklariert
30.07.2007 10:27:31
Renee
Hello Reiner,
Ich weiss nicht ob die Ausführungen von Luc Dich mehr verwirren, als das sie hilfreich sind.
Diese Unterschiede wann und wo die Datumszählung anfangen sind für Dein Problem völlig irrelevant.
Völlig verwirrend ist auch für mich "einer deutschen xlVersion als MM.TT.JJJJ eingetragen wird, wird automatisch zu Text...". Ein Zelle kann durchaus so formatiert sein und immer noch eine Datum enthalten.
Also hier ist eine Beispielmappe, mit einer Userform. Du kannst verschiedene Datumsformate in die UF eingeben und Du kannst in beliebig formatierten Datumsspalten suchen. Um die Verwirrung komplett zu machen: Du siehst eine Datumszelle enthält nicht nur ein Tagesdatum, sonder implizit auch immer eine Zeit, auch wenn diese 00:00 ist (d.h. Mitternacht vom Vortag zu diesem Tag) .
Ich hoffe die Beispielmappe klärt einiges.
https://www.herber.de/bbs/user/44550.xls
Greetz Renee

Anzeige
AW: Variable als Datum deklariert
30.07.2007 11:24:00
reiner
hallo renee,
in der Tat, die Ausführungen von Luc sind ein wenig abstrakt;
vielen Dank für deine Beispieldatei.
Als Rückmeldung für Luc habe ich anhand von Beispielen versucht nochmals die Problematik zu verdeutlichen, schau doch bitte mal in den genannten Beitrag.
mfg
reiner

Anzeige
AW: Variable als Datum deklariert
30.07.2007 12:41:00
Renee
Hello Reiner,
Deine Variable suchbegriffdatum sollte so abgefüllt werden:

suchbegriffdatum = DateSerial(Right(ComboBox1, 4), _
Left(ComboBox1, 2), _
Mid(ComboBox1, 4, 2))


Dein Suchbefehl sollte so lauten:


Set rngf = rng.Find(suchbegriffdatum, After:=rng.Cells(rng.Count, 1), LookIn:=xlFormulas)


Greetz Renee

Anzeige
AW: Variable als Datum deklariert
30.07.2007 15:29:11
reiner
Hallo renee,
das ist die Lösung, danke dir
reiner

Dann formatiere mal ein Datum außerhalb...
31.07.2007 16:05:00
Luc:-?
...des Excel-Datumsintervals als Datum, Renee!
Du kannst es natürlich auch mit dem 29.2.2007 versuchen... ;-)
Gruß Luc :-?

AW: Dann formatiere mal ein Datum außerhalb...
31.07.2007 17:55:32
Renee
Hello Luc,
Ich will mich mit Dir nicht über Unsinnigkeiten streiten.
Das Problem ist längst gelöst und ad acta gelegt.
Greetz Renee

Anzeige
AW: Variable als Datum deklariert
29.07.2007 21:20:19
Ramses
Hallo
Probiers doch mal so :-)
Msgbox Format(DateSerial(2007,7,27),"dd.mm.yyyy")
Gruss Rainer

AW: Variable als Datum deklariert
29.07.2007 22:30:00
reiner
hallo,
das hilft mir leider nicht weiter
mfg
reiner

...und warum nicht? ;-) Nebenbei,...
30.07.2007 04:39:00
Luc:-?
...Reiner,
gibt es einen Unterschied zwischen VBA und Excel bei der Datumsauswertung: Der Startpunkt der Tageszählung (Tag 1) ist bei Excel je nach Einstellung der 1.1.1900 bzw der 1.1.1904 - in VBA ist es der 31.12.1899 bzw als Tag 0 dann der 30.12.1899, während der bei Excel dann als 0.1.1900 erscheint. Das Tagesminimum entspricht in VBA dem 1.1.100 (negativer Tageswert), das Maximum bei beiden dem 31.12.9999! Für diese Zeiträume wdn die Tage gezählt! Die Uhrzeit ergibt sich dann aus Bruchteilen eines Tages [1 s = 1/(24*60^2)]. Für eine reine Uhrzeitangabe ist deshalb wohl auch die Null in Excel vorgesehen. In VBA gehört auch immer der konkrete Tag mit dazu! Die Differenz zwischen VBA und Excel entsteht dadurch, dass für Excel ein 29.2.1900 existiert, obwohl 1900 nach der Jahrhundertregel des Gregorianischen Kalenders kein Schaltjahr war! In späteren Jhdd wurde das auch berücksichtigt.
Aus einer solchen Tageszahl kann man dann natürlich jedes zulässige Datumsformat erzeugen, wenn man es richtig macht und berücksichtigt, dass VBA idR von der US-Praxis ausgeht, wenn das Datum als Text vorliegt - also mm-dd-yyyy.
Dein Misserfolg bei der Suche nach bestimmten Daten, hängt möglicherweise mit der Formatierung von Daten als Text zusammen - ein Datum, das in eine Zelle einer deutschen xlVersion als MM.TT.JJJJ eingetragen wird, wird automatisch zu Text, wenn die Zellformatierung Standard ist und TT>12 ist. Es wird dann nämlich von den dt.Datumseinstellungen ausgegangen und die sind idR TT.MM.[JJ]JJ! Somit erhält VBA aus diesen Zellen Texte, die es nicht ohne entsprechende VB-Fkt als reguläres Datum interpretieren kann!
Gruß Luc :-?

Anzeige
AW: ...und warum nicht? ;-) Nebenbei,...
30.07.2007 10:58:06
reiner
Hallo Luc,
vielen Dank für deine Mühe bei der Lösung meines Problems. Nachfolgend schildere ich das Verhalten des Systems bei einer Suchanfrage:
In der Tabellenspalte wird das Datum (Spalte“C“) in das Format „mm.dd.yyyy“ umgewandelt, alle Einträge dieser Spalte werden in eine CB eingelesen (doppelte Einträge werden unterdrückt) und können ausgewählt werden. Wähle ich z.B. den Eintrag 01.02.2007 (Monat“01“, Tag“02“, Jahr“2007“) wird in der Datumsspalte jedoch der Eintrag mit dem Datum 02.01.2007 gewählt und nicht 01.02.2007!!!
Wähle ich 01.05.2007 (5. Jan. 2007) wird in der Tabelle kein Treffer markiert da es einen entsprechenden Eintrag 05.01.2007 nicht gibt. (umgewandeltes Datumsformat!!!)
Der ausgewählte Eintrag in der CB „01.19.2007“ (19. Jan. 2007) hingegen wird gefunden, wohl aus dem Grund dass „19“ keine Monats- sondern nur eine Tageszahl sein kann.
Leider kann ich die Datei nicht hochladen da sie viel zu umfangreich hinsichtlich der Datenmenge ist und außerdem überwiegend persönliche sensible Daten enthält, ich hoffe auf dein Verständnis.
vielleicht hilft der nachfolgende Auszug aus dem Programmcode bei der Lösung des Problems:

Set rng = Range("C2:C" & Cells(Rows.Count, 1).End(xlUp).Row)
Set rngF = rng.Find(SuchbegriffDatum, After:=rng.Cells(rng.Count, 1))


„SuchbegriffDatum“ ist eine Variable welche den aus der CB ausgewählten Eintrag enthält nach dem in der Tabelle gesucht werden soll
Wenn ich den Programmcode mit F8 zeilenweise abarbeiten lasse, wird mir unter dem Cursor an der Codezeile: After:=rng.Cells(rng.Count, 1) als (rng.Count, 1) immer die letzte Tabellenzeile in gelber Farbe angezeigt. Kann es sein dass die Suche von der letzten Zeile beginnt und rückwärts bis zur ersten Zeile durchgeführt wird?
Vielleicht sollte die Suche bei der ersten Zeile beginnen? Wie müsste dann der Code abgeändert werden?
mfg
reiner

Anzeige
Die Suche beginnt regulär immer nach...
31.07.2007 16:01:00
Luc:-?
...der hinter After gen. Zelle, Reiner,
und läuft dann vorwärts, nicht rückwärts. Aber, was soll bei rng.Cells(rng.Count, 1) rauskommen? Das scheint mir doch suspekt - was wird gezählt!?
Gruß Luc :-?
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Variable als Datum in Excel VBA verwenden


Schritt-für-Schritt-Anleitung

  1. Variable deklarieren: Um eine Datumsvariable in Excel VBA zu deklarieren, benutze den Datentyp Date. Beispiel:

    Dim suchbegriffdatum As Date
  2. Datum aus einer ComboBox holen: Wenn Du ein Datum aus einer ComboBox (CB) erhältst, stelle sicher, dass du es im richtigen Format übergibst. Die folgende Funktion wandelt ein Datum im Format mm.dd.yyyy in eine Date-Variable um:

    suchbegriffdatum = DateSerial(Right(ComboBox1, 4), _
                                 Left(ComboBox1, 2), _
                                 Mid(ComboBox1, 4, 2))
  3. Suchbefehl ausführen: Um in einer Excel-Tabelle nach dem Datum zu suchen, verwende die Find-Methode. Beispiel:

    Set rngF = rng.Find(suchbegriffdatum, After:=rng.Cells(rng.Count, 1), LookIn:=xlFormulas)
  4. Variablenformatierung prüfen: Achte darauf, dass die Datumsspalte in Deiner Tabelle im richtigen Format vorliegt, um Missverständnisse zu vermeiden.


Häufige Fehler und Lösungen

  • Fehler: Suche findet kein Datum: Wenn Deine Suche kein Ergebnis liefert, könnte das an einem Formatierungsproblem liegen. Stelle sicher, dass das Datum in der Tabelle und das Format in der ComboBox übereinstimmen.

  • Lösung: Ändere das Datumsformat in den Regional Settings Deines Systems, damit es mit dem in der Tabelle übereinstimmt.

  • Fehler: Unsinnige Ergebnisse bei der Suche: Wenn Du ein Datum wie 01.02.2007 auswählst und stattdessen 02.01.2007 gefunden wird, liegt das an der Interpretation der Datumsformate.

  • Lösung: Benutze immer das Format dd.mm.yyyy, wenn Du sicherstellen möchtest, dass die Suche korrekt funktioniert.


Alternative Methoden

Eine alternative Methode zur Arbeit mit Datumsvariablen ist die Verwendung von Excel-Formeln anstelle von VBA. Du kannst beispielsweise die DATUM()-Funktion nutzen, um Datumswerte direkt in Zellen zu erstellen.

=DATUM(JAHR(A1); MONAT(A1); TAG(A1))

Diese Funktion kann Dir helfen, Datumswerte in der Tabelle zu erzeugen, die dann leicht bearbeitet und durchsucht werden können, ohne VBA verwenden zu müssen.


Praktische Beispiele

  1. Datum in VBA anlegen:

    Dim meinDatum As Date
    meinDatum = DateSerial(2023, 10, 1) ' Setzt das Datum auf den 1. Oktober 2023
  2. Datum aus einer Zelle holen:

    Dim zellenDatum As Date
    zellenDatum = Cells(1, 1).Value ' Holt das Datum aus Zelle A1
  3. Suche nach einem Datum:

    Dim rng As Range
    Set rng = Range("C2:C" & Cells(Rows.Count, 1).End(xlUp).Row)
    Set rngF = rng.Find(zellenDatum, After:=rng.Cells(1, 1), LookIn:=xlFormulas)

Tipps für Profis

  • Datumsformate: Achte darauf, dass die Datumsformate in Deiner Tabelle und der VBA-Umgebung übereinstimmen. Das kann viele Probleme bei der Suche vermeiden.

  • Verwendung von DateValue: Wenn Du Datumswerte als Text bekommst, kannst Du DateValue verwenden, um sie in ein Datum zu konvertieren.

  • Fehlerbehandlung: Implementiere Fehlerbehandlung in Deinem Code, um Probleme bei der Datumssuche zu identifizieren. Beispiel:

    On Error Resume Next
    Set rngF = rng.Find(suchbegriffdatum)
    If rngF Is Nothing Then
       MsgBox "Datum nicht gefunden!"
    End If
    On Error GoTo 0

FAQ: Häufige Fragen

1. Warum wird das Datum nicht gefunden?
Das könnte an einem Formatierungsproblem liegen. Stelle sicher, dass das Datum in der Tabelle und das Datum, das Du suchst, im gleichen Format vorliegen.

2. Kann ich ein Datum im Format mm.dd.yyyy verwenden?
Ja, Du kannst ein Datum im Format mm.dd.yyyy verwenden, solange Du sicherstellst, dass es korrekt in eine Date-Variable umgewandelt wird.

3. Was passiert, wenn ich ein Datum außerhalb des Excel-Datumsintervalls eingebe?
Excel kann keine Datumswerte außerhalb des definierten Bereichs verarbeiten. Stelle sicher, dass Deine Datumswerte innerhalb des gültigen Bereichs liegen.

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