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

Forumthread: per vba den zahlenwert von datum/Uhrzeit ermitteln

per vba den zahlenwert von datum/Uhrzeit ermitteln
05.05.2005 20:30:48
datum/Uhrzeit
Hallo Wissende,
in A1 steht 01.05.2005 16:02:00 , ist auch so formatiert, B1 ist als Standard formatiert, dort steht dann als Formel: =A1 und die Anzeige ist 38473,66806, wie mache ich das in vba, also wie erhalte ich die 38473,66806 aus A1?
Dankeschön im Voraus
Gruß
Reinhard
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: per vba den zahlenwert von datum/Uhrzeit ermitteln
05.05.2005 20:33:15
datum/Uhrzeit
Hallo Reinhard,
Dim Wert as double
Wert = Cdbl(Range("A1").value
Msgbox Wert
Gruß
Sigi
AW: per vba den zahlenwert von datum/Uhrzeit ermit
05.05.2005 23:51:30
datum/Uhrzeit
Hallo Sigi,
funktioniert, danke, aber ich häng an sich an was anderem und dachte so käm ich weiter aber ich häng noch fest.
Ich wollte Wete filtern die zwischen 2 Uhrzeiten liegen, aber es wird nichts ausgewählt bei:
Sub test()
Range("a1").Select
MsgBox CDbl(CDate("01.05.2005 16:00"))
Selection.AutoFilter Field:=1, _
Criteria1:=">=" & CStr(CDbl(CDate("01.05.2005 16:00"))), Operator:=xlAnd, Criteria2:="<=" & CStr(CDbl(CDate("01.05.2005 18:00")))
End Sub
bezogen auf die Tabelle:
Tabellenblattname: Tabelle1
A                  B
1             zeiten
2  01.05.05 16:02:00   38473,6680555556
3  01.05.05 15:02:00   38473,6263888889
4  01.05.05 17:34:00   38473,7319444444
5  01.05.05 19:02:00   38473,7930555556
Benutzte Formeln:
B2:  =A2
B3:  =A3
B4:  =A4
B5:  =A5
Namen in der Tabelle:
Tabelle1!_FilterDatabase:  =Tabelle1!$A$1:$A$7
Gruß
Reinhard

Anzeige
noch offen vergessen o.w.T.
06.05.2005 00:20:57
Reinhard
AW: noch offen vergessen o.w.T.
06.05.2005 10:07:17
WernerB.
Hallo Reinhard,
mit Deinem Problem habe ich mich jetzt einige Zeit intensiv auseinander gesetzt und bin zu folgendem Ergebnis gekommen:
1. Sehr wahrscheinlich ist es so, dass der Autofilter bei Datum nur das Tagesdatum (aber keine mit dem Tagesdatum verbundene Uhrzeit) berücksichtigt; diese Angabe ist ohne Gewähr!
2. Wenn Tagesdatum und Uhrzeit in einer Zelle stehen, könnte die Formatierung dieser Zellen als "Text" Abhilfe bringen; allerdings müssen dann die Datums- und Uhrzeitwerte auch als Text eingegeben werden (mit dem Datum kann dann natürlich nicht mehr gerechnet werden).
Unter dieser Voraussetzung funktioniert bei mir dieses Makro:

Sub test()
Range("A1").Select
Selection.AutoFilter Field:=1, _
Criteria1:=">=01.05.2005 16:00", _
Operator:=xlAnd, _
Criteria2:="<=01.05.2005 18:00"
End Sub

3. Die Variante, Tagesdatum und Uhrzeit in getrennten Zellen/Spalten unterzubringen, habe ich jetzt nicht getestet.
4. Vielleicht kennt ja ein anderer Forumsteilnehmer eine bessere Lösung; deswegen habe ich den Beitragsstatus noch immer auf "offen" gesetzt.
Viel Erfolg wünscht
WernerB.
P.S.: Dieses Forum lebt auch von den Rückmeldungen der Fragesteller an die Antworter !
Anzeige
Lösung
06.05.2005 11:47:38
Reinhard
Hallo Werner,
danke dir für deine Mühen. Ich habe deine Ansätze übernommen und wollte das formatieren als Text per VBa machen, leider bekam ich das nicht hin und auch andere Ansätze mit Hilfsspalten wo nur die Uhrzeit als Text steht usw scheiterteten.
Woanders fand ich dann die geniale Lösung, wo man die Daten als Datumswerte lassen kann.
Sub test()
Range("a1").AutoFilter Field:=1, _
Criteria1:=">=" & Replace(CDbl(CDate("1.5.2005 16:00")), ",", "."), _
Operator:=xlAnd, _
Criteria2:="<=" & Replace(CDbl(CDate("1.05.2005 18:00")), ",", ".")
End Sub

Gruß
Reinhard
Anzeige
Replace ?
07.05.2005 15:19:43
WernerB.
Hallo Reinhard,
mit Deiner "Replace"-Variante dürftest du vermutlich Schiffbruch erleiden.
Da scheint mir diese Version doch wesentlich erfolgversprechender:

Sub test()
Range("A1").AutoFilter Field:=1, _
Criteria1:=">=" & WorksheetFunction.Substitute _
(CDbl(CDate("01.05.2005 16:00")), ",", "."), _
Operator:=xlAnd, _
Criteria2:="<=" & WorksheetFunction.Substitute _
(CDbl(CDate("01.05.2005 18:00")), ",", ".")
End Sub

Gruß
WernerB.
Anzeige
AW: Replace ?
07.05.2005 16:48:20
Reinhard
Hallo Werner,
der das dort postete gibt sich immer sehr sehr viel Mühe zu helfen (siehe Anhang) und da er wie hier mit Jeannie auch eine Beispieltabelle hinterlegte habe ich es nicht getestet.
Gruß
Reinhard
Hallo Stefan,
das Problem ist wohl, dass bei den AutoFilter-Kriterien Datum/Uhrzeit nicht in diesem
Format, sondern als Zahlenwerte vorgegeben werden müssen. (Dann kann Excel die Werte mit
den Zellwerten, die intern ja auch nur Dezimalzahlen sind, vergleichen.)
Mit ">=38473.66667" anstelle von ">=01.05.2005 16:00"
und " (also mit Dezimalpunkt statt Komma) sollte es gehen.
Wenn deine Tabelle etwa so aussieht:
_|________A________|_B__|C|_D__|________E________|_F__|________G________|
1|     Zeit        |Txt | |von | 01.05.2005 16:00|bis | 01.05.2005 18:00|
2| 01.05.2005 14:00|tx1 | |    |                 |    |                 |
3| 01.05.2005 15:00|tx2 | |    |                 |    |                 |
4| 01.05.2005 16:00|tx3 | |    |                 |    |                 |
5| 01.05.2005 17:00|tx4 | |    |                 |    |                 |
6| 01.05.2005 18:00|tx5 | |    |                 |    |                 |
7| 01.05.2005 19:00|tx6 | |    |                 |    |                 |
8| 01.05.2005 20:00|tx7 | |    |                 |    |                 |
und "AutoFilter" eingeschaltet ist, liest das folgende Makro die beiden Vorgabedaten in
E1 und G1 (als Zeichenketten), wandelt sie in Double um, ersetzt Komma durch Punkt und
stellt den Autofilter ein. Dann sollte man nur noch die Zeilen 4 bis 6 sehen.
Sub Filter_DatumZeit()
Dim kr1$, kr2$
kr1 = ">=" & Replace(CDbl([E1]), ",", ".")
kr2 = "<=" & Replace(CDbl([G1]), ",", ".")
Selection.AutoFilter Field:=1, Criteria1:=kr1, Operator:=xlAnd, Criteria2:=kr2
End Sub
Kannst du damit dein Problem lösen?
(Vermutlich gehts auch einfacher, aber so funzt es schon mal.)
Grüße aus Kamp-Lintfort
Erich

Anzeige
AW: Replace !!!
09.05.2005 12:50:11
WernerB.
Hallo Reinhard,
ich muss meine Zweifel an "Replace" relativieren.
Die "Replace"-Funktion scheint jüngeren Datums zu sein. Ich hatte das Makro mit Excel 97 getestet, da gibt es diese Funktion noch nicht (ob in Excel 2000, weiß ich nicht); in Excel XP klappt die Sache jedenfalls.
Hingegen mit Excel 97 und (vermutlich) allen jüngeren Versionen funktioniert die von mir vorgeschlagene "WorksheetFunction.Substitute"-Variante.
Übrigens: Die Erklärung von Erich zum Problem leuchtet mir ein, sie ist für mich gut nachvollziehbar.
Gruß
WernerB.
Anzeige
AW: Replace !!!
09.05.2005 23:28:54
Reinhard
Hallo Werner,
ja in 2000 gibt es das.
Jepp. Erich ist wirklich sehr engagiert, siehe Anhang, den er nur so als Info postete, seh ich gern sowas, kann jeder von lernen.
Gruß
Reinhard
Hallo Excelianer,
wenn man mal sehen möchte, mit welchem Zahlenwert Excel rechnet, wenn in einer Zelle ein Datum, eine Zeit oder auch das nummerische Ergebnis einer Formel steht, lässt sich das einfach durch anhängen einer leeren Zeichenkette machen.
Steht in A1 etwa das Datum 07.05.2005, zeigt die Formel =A1 & "" den Wert 38479.

Kleine Beispieltabelle:
|           A            |         B          |
1 |      Darstellung       |   Wert als Text    |
2 |             07.05.2005 | 38479              |
3 |    07.05.2005 00:00:00 | 38479              |
4 |                  09:11 | 0,382638888888889  |
5 |                  09:12 | 0,383333333333333  |
6 |       07.05.2005 09:11 | 38479,3826388889   |
7 |  07.05.2005 08:54:17,4 | 38479,3710347222   |
8 |  07.05.2005 08:54:17,6 | 38479,371037037    |
9 |  07.05.2005 08:54:18,0 | 38479,3710416667   |
10 |            0,142857143 | 0,142857142857143  |
11 |            0,666666667 | 0,666666666666667  |
Benutzte Formeln:
A10: =1/7
A11: =2/3
B2 : =A2 & ""
B3 : =A3 & ""
usw. bis
B11: =A11 & ""
In den Zeilen 7 bis 9 zeigt sich, dass auch Zehntelsekunden ordentlich verarbeitet werden können.
Bei den Zeilen 10 und 11 kann man auch schön erkennen, dass Excel mit mehr Stellen rechnet als (im Standard) dargestellt werden.
Grüße aus Kamp-Lintfort
Erich

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA zur Ermittlung von Zahlenwerten aus Datum und Uhrzeit


Schritt-für-Schritt-Anleitung

Um den Zahlenwert von Datum und Uhrzeit in Excel mithilfe von VBA zu ermitteln, kannst du die folgenden Schritte befolgen:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Füge den folgenden Code ein:

    Sub ErhalteZahlenwert()
       Dim Wert As Double
       Wert = CDbl(Range("A1").Value)
       MsgBox Wert
    End Sub

    Dieser Code liest den Wert aus Zelle A1 und gibt den Zahlenwert in einer MessageBox aus.

  4. Führe das Makro aus:

    • Drücke F5 oder gehe zu Ausführen und wähle Sub/UserForm ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Typkonflikt"

    • Lösung: Stelle sicher, dass die Zelle A1 ein korrekt formatiertes Datum enthält. Wenn das Datum als Text formatiert ist, konvertiere es zunächst in ein Datum.
  • Fehler: Autofilter funktioniert nicht

    • Lösung: Wenn du versuchst, nach einem Datum zu filtern, stelle sicher, dass du den Zahlenwert verwendest. Der Autofilter erwartet die Kriterien als Zahlenwerte, nicht als Datumsangaben.

Alternative Methoden

Eine alternative Methode zur Ermittlung des Zahlenwerts ist die Verwendung einer Formel in Excel:

=A1 + 0

Diese Formel gibt ebenfalls den internen Zahlenwert des Datums und der Uhrzeit zurück.


Praktische Beispiele

Hier sind einige praktische Beispiele, um mit VBA und dem Zahlenwert von Datum und Uhrzeit zu arbeiten:

  1. Filtern von Daten zwischen zwei Zeitpunkten:

    Sub FilterNachUhrzeit()
       Dim startZeit As Double
       Dim endZeit As Double
       startZeit = CDbl(CDate("01.05.2005 16:00"))
       endZeit = CDbl(CDate("01.05.2005 18:00"))
    
       Range("A1").AutoFilter Field:=1, Criteria1:=">=" & startZeit, Operator:=xlAnd, Criteria2:="<=" & endZeit
    End Sub
  2. Zahlenwert anzeigen lassen:

    Sub ZeigeZahlenwert()
       MsgBox "Der Zahlenwert ist: " & CDbl(Range("A1").Value)
    End Sub

Tipps für Profis

  • Wenn du mit Zeitstempeln arbeitest, ist es hilfreich, die Funktion WorksheetFunction.Substitute anstelle von Replace zu verwenden, um sicherzustellen, dass dein Code auch in älteren Excel-Versionen funktioniert.

  • Nutze das Debuggen in VBA, um sicherzustellen, dass deine Variablen die erwarteten Werte haben. Verwende Debug.Print, um Variablenwerte im Direktfenster anzuzeigen.


FAQ: Häufige Fragen

1. Wie kann ich den Zahlenwert eines Datums in einer Zelle anzeigen? Du kannst die Formel =A1 + 0 verwenden oder VBA wie oben beschrieben einsetzen.

2. Warum funktioniert der Autofilter nicht mit Zeitstempeln? Der Autofilter in Excel benötigt die Kriterien als Zahlenwerte. Konvertiere deine Zeitstempel in Zahlen, bevor du die Filter anwendest.

3. Welche Excel-Version wird benötigt, um diesen VBA-Code auszuführen? Der bereitgestellte VBA-Code sollte in Excel 2000 und neueren Versionen funktionieren. Achte darauf, dass Replace in älteren Versionen nicht verfügbar ist. Verwende stattdessen WorksheetFunction.Substitute.

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