Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

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

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

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

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

Anzeige
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

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

Anzeige
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

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

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

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 :-?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige