Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1012to1016
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
Inhaltsverzeichnis

Probleme mit Datum

Probleme mit Datum
13.10.2008 08:59:01
Nadja
Hallo ich habe folgendes Datumsformat
dd.mm.yy
Folgende Funktion:
Function getFixDateBefore(ByVal yearsBefore As Integer, monthsFix As String) As String Application.Volatile LYear = CLng(Format(Now - 365 * yearsBefore, "yyyy")) getFixDateBefore = Format(convert_yyyyMMdd_AsDate(CStr(LYear) + monthsFix + "01"), "dd.mm. _ yy") End Function



Function convert_yyyyMMdd_AsDate(v As String) As Date
Dim dt As Date
If v  "" And v  "0" Then
strYear = Mid(v, 1, 4)
strMonth = Mid(v, 5, 2)
strDay = Mid(v, 7, 2)
dt = CDate(strMonth & "/" & strDay & "/" & strYear)
End If
convert_yyyyMMdd_AsDate = dt
End Function


Wenn ich jetzt ein Datum reinschreibe von heute: Dann soll er 4 Jahre und einen Tag zurückgehen.
4 Jahre klappt. Aber bei 4 Jahren und 1 Tag klappt das nicht...
Jemand eine Inder

25
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Probleme mit Datum
13.10.2008 09:06:44
Hajo_Zi
Hallo Nadja,
die Schaltjahrproblemtik habe ich jetzt nicht betrachtet.

Option Explicit
Function convert_yyyyMMdd_AsDate(v As Date) As Date
Dim dt As Date
If v  "0" Then
convert_yyyyMMdd_AsDate = DateSerial(Year(v) + 4, Month(v), Day(v)) + 1
End If
End Function



AW: Probleme mit Datum
13.10.2008 09:30:02
Hajo_Zi
Hallo Nadja,
ich habe gerade festgestellt die Schaltjahrproblematik ist gelöst.
Gruß Hajo
AW: Probleme mit Datum
13.10.2008 09:31:55
Nadja
Hallo Hajo
hab mich wohl falsch ausgedrückt sorry
den Code hast du ja schon
Jetzt trage ich in eine Zelle das Datum von heute ein (13.10.08) und dazu die Formel:
=getYearsBefore(4;0)
d.h. er soll genau 4 Jahre zurück
Funktioniert dann auch 13.10.04
Wenn ich aber
=getYearsBefore(4;1 eintrage)
Also 4 Jahre und 1 Tag kommt als Ergebnis
10.12.04
und nicht 12.10.04
Anzeige
AW: Probleme mit Datum
13.10.2008 09:39:00
Hajo_Zi
Hall Nadja,
ich habe mich an Deinen Code gehalten und da wurde nur 1 Paramter übergeben. Vorher war es Weiter jetzt zurück. Ich würde die Richtung ja mit + und Minus eingeben.
 DE
3201.03.1229.02.08

Formeln der Tabelle
ZelleFormel
E32=convert_yyyyMMdd_AsDate(D32;-4;-1)


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4

Option Explicit
Function convert_yyyyMMdd_AsDate(Datum As Date, Jahr As Integer, Tag As Integer) As Date
Dim dt As Date
If Datum  "0" Then
convert_yyyyMMdd_AsDate = DateSerial(Year(Datum) + Jahr, Month(Datum), Day(Datum) + Tag) _
End If
End Function


Gruß Hajo

Anzeige
AW: Probleme mit Datum
13.10.2008 09:42:30
Nadja
Hallo Hajo,
geht das mit meinem Code nicht.
Weil eigentlich funktioniert es ja
Blos vertauscht er irgendwie den Monat mit dem Datum
Kann man das nicht in meinem Code irgendwie sehen wo er was vertauscht
Es ist eine rieseige Tabelle und wenn ein Datum dirn steht soll es mit dieser Formel bearbeitet werden:
=getYearsBefore(4;2)
4 steht für Jahre und 2 für Tage
AW: Probleme mit Datum
13.10.2008 09:47:05
Hajo_Zi
Hallo Nadja,
hast Du Deinen VBA Level falsch eingetragen? Das Du meine Lösung in Frage stellst?
Deiner Funktion wird nur ein Parameter übergeben. Du willst aber zu einem Datum , Jahr und Tage addieren. Das wären nach meiner Meinung 3 Parameter.
Ich hindere nicht daran, Deine Funktrion so umzubauen. Ich würde aber vermuten mit nur einem Übergabeparamter ist es ein wenig kompliziert.
Gruß Hajo
Anzeige
AW: Probleme mit Datum
13.10.2008 09:51:03
Nadja
Hi Hajo,
sorry wollte dich nicht angreifen ;)
Also was soll ich deiner Meinung nach machen?
AW: Probleme mit Datum
13.10.2008 09:53:00
Hajo_Zi
Hallo Nadja,
Da mußt Du nicht mich Fragen, entweder Deinen Code umarbeiten oder meinen benutzen.
Gruß Hajo
AW: Probleme mit Datum
13.10.2008 09:59:32
Nadja
So habe deinen Code:

Function convert_yyyyMMdd_AsDate(Datum As Date, Jahr As Integer, Tag As Integer) As Date
Dim dt As Date
If Datum  "0" Then
convert_yyyyMMdd_AsDate = DateSerial(Year(Datum) + Jahr, Month(Datum), Day(Datum) +  _
Tag) _
End If
convert_yyyyMMdd_AsDate = dt
End Function


durch meinen ersetzt
An folgender Stelle bringt er einen Fehler beim kompilieren:


Function getFixDateBefore(ByVal yearsBefore As Integer, monthsFix As String) As String
Application.Volatile
LYear = CLng(Format(Now - 365 * yearsBefore, "yyyy"))
getFixDateBefore = Format(convert_yyyyMMdd_AsDate(CStr(LYear) + monthsFix + "01"), "dd.mm. _
yy")
End Function


In der ersten Zeile:
Argument ist nicht optional

Anzeige
AW: Probleme mit CDate
13.10.2008 10:10:23
Erich
Hallo Nadja,
das Problem bekommst du, weil du das Datum mit Hilfe von Strings verarbeitest.
Probier mal

Sub tst()
MsgBox CDate("10/12/2008")
MsgBox CDate("10/13/2008")
End Sub

CDate versucht, aus einem String das Datum entsprechend dem Gebietsschema abzuleiten,
bei "10/12/2008" ergibt das den 10.12.2008.
Da 13 kein gültiger Monat ist, macht CDate aus "10/13/2008" den 13.10.2008.
An deiner Stelle würde ich hier überhaupt nicht mit Strings arbeiten,
sondern - wie es Hajo vorschlägt - mit den Funktionen DateSerial, Year, Month und Day.
Das ist einfacher, schneller und sicherer.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Probleme mit CDate
13.10.2008 10:18:43
Nadja
Ich habe den vorgeschlagenen Code eingefügt, ergibt aber einen Fehler beim kompilieren
Momentan blick ich bei den ganzen Antworten nicht durch....
Es wäre nett wenn ihr (oder Hajo) nochmal den Code postet den ich einfügen soll
Und den Befehl wie ich ein Datum mit Jahr , Und Tag ändern kann
Sorry wegen der Umstände
AW: Probleme mit CDate
13.10.2008 10:22:00
Hajo_Zi
Hallo Nadja,
Ich habe meinen Code getestet und der ist in Ordnung.
Gruß Hajo
AW: Probleme mit CDate
13.10.2008 10:24:23
Nadja
Bei mir bringt er einen Kompilierungsfehler
Habe es 3 mal getestet...
Ich hab ja in meinem Anfangspost 2 Funktionen veröffnetlicht
Muss ich nur eine dieser beiden ändern?
Anzeige
AW: Probleme mit CDate
13.10.2008 10:28:41
Hajo_Zi
Hallo Nadja,
löschen. Da meine Funktion den gleichen Namen hat.
Gruß Hajo
AW: Probleme mit CDate
13.10.2008 11:06:00
Nadja
Habe

Function convert_yyyyMMdd_AsDate(v As String) As Date
Dim dt As Date
If v  "" And v  "0" Then
strYear = Mid(v, 1, 4)
strMonth = Mid(v, 5, 2)
strDay = Mid(v, 7, 2)
dt = CDate(strMonth & "/" & strDay & "/" & strYear)
End If
convert_yyyyMMdd_AsDate = dt
durch:


Function convert_yyyyMMdd_AsDate(Datum As Date, Jahr As Integer, Tag As Integer) As Date
Dim dt As Date
If Datum  "0" Then
convert_yyyyMMdd_AsDate = DateSerial(Year(Datum) + Jahr, Month(Datum), Day( _
Datum) + Tag) _
End If
ersetzt.
Und die Funktion:


Function getFixDateBefore(ByVal yearsBefore As Integer, monthsFix As String) As String
Application.Volatile
LYear = CLng(Format(Now - 365 * yearsBefore, "yyyy"))
getFixDateBefore = Format(convert_yyyyMMdd_AsDate(CStr(LYear) + monthsFix + "01"), "dd.mm. _
yy")
End Function


Nicht geändert

Anzeige
AW: Probleme mit CDate
13.10.2008 11:25:00
Hajo_Zi
Hallo Nadja,
wo ist das Problem?
im ersten Beitrag Stand

Jahre klappt. Aber bei 4 Jahren und 1 Tag klappt das nicht...


und dafür habe ich eine Lösung gepostet.
Gruß Hajo

AW: Probleme mit CDate
13.10.2008 11:26:54
Nadja
Diese habe ich ja auch eingefügt
Und dann kommt der Kompilierungsfehler
Weiss selber nicht wo das Problem liegt :(
Also hier nochmal der komplette Originalcode:
13.10.2008 11:31:00
Nadja
Also hier nochmal der komplette Originalcode:

Function getYearsBefore(ByVal yearsBefore As Integer, daysBefore As Integer) As String
Application.Volatile
LYear = CLng(Format(Now - daysBefore, "yyyy"))
SMonth = (Format(Now - daysBefore, "mmdd"))
LDatum = CStr(LYear - yearsBefore) + SMonth
getYearsBefore = Format(convert_yyyyMMdd_AsDate(CStr(LDatum)), "dd.mm.yy")
End Function



Function getFixDateBefore(ByVal yearsBefore As Integer, monthsFix As String) As String
Application.Volatile
LYear = CLng(Format(Now - 365 * yearsBefore, "yyyy"))
getFixDateBefore = Format(convert_yyyyMMdd_AsDate(CStr(LYear) + monthsFix + "01"), "dd.mm. _
yy")
End Function



Function convert_yyyyMMdd_AsDate(v As String) As Date
Dim dt As Date
If v  "" And v  "0" Then
strYear = Mid(v, 1, 4)
strMonth = Mid(v, 5, 2)
strDay = Mid(v, 7, 2)
dt = CDate(strMonth & "/" & strDay & "/" & strYear)
End If
convert_yyyyMMdd_AsDate = dt
End Function


Anzeige
AW: Also hier nochmal der komplette Originalcode:
13.10.2008 11:35:00
Hajo_Zi
Hallo Nadja,
ich hatte schon vor zig Beiträgen geschrieben Deinen alten Code Löschen. Mir scheint aber Du kannst Dich davon nicht trennen. Dann kann ich Dir nicht helfen und bestimmt auich kein anderer. Also lasse es Deinen Beitrag weiterhin als offen zu kennzeichnen.
Gruß Hajo
AW: Also hier nochmal der komplette Originalcode:
13.10.2008 11:47:07
Nadja
Hallo Hajo,
sorry werde dann nichts mehr posten.
Ich habe hier nochmal meinen Originalcode aufegührt
Habe deinen eingefügt aber irgendwo kommt ein Kompilierungsfehelr
Den Code habe ich längst ersetzt
Sorry wenn ich dich aufgehalten habe...Trotzdem danke für deine Mühe
Anzeige
AW: Also hier nochmal der komplette Originalcode:
13.10.2008 11:56:22
Hajo_Zi
Hallo Nadja,
es geht nicht um aufhalten. In meuiner Datei geht es und Deine Datei sehe ich nicht.
Gruß Hajo
AW: Probleme mit Datum
13.10.2008 12:54:03
Chris
Servus Nadja,
anscheinend bekommt ihr das ja nicht gebacken. Falls du immer noch eine Lösung suchst, probier mal das:

Function Convert(x As Range, YearDiff As Long, DayDiff As Long) As Date
Dim Datum As Date, strDatum As String
If IsDate(x) Then
strDatum = Day(x) & "." & Month(x) & "." & Year(x) + YearDiff
Datum = strDatum
Datum = Datum + DayDiff
Convert = Format(Datum, "dd.mm.yy")
End If
End Function


in ein allgemeines Modul.
z.B. Steht in C1 das Datum 12.04.08,
dann schreibst du in deine Zielzelle: =Convert(C1;-4;-11) das Ergebnis ist der 01.04.04 bei -10 wäre es der 02.04.04 u.s.w. bei psitiven Zahlen geht die Funktion eben auf größere Datumswerte, z.B.: =Convert(C1;2;11) wäre der 23.04.10.
Gruß
Chris

AW: Probleme mit Datum
13.10.2008 16:07:45
Erich
Hallo Nadja und Chris,
das geht einfacher ohne VBA - und wenn schon mit VBA, dann doch ohne Strings:
 ABCD
113.10.200812.10.200412.10.200412.10.2004
201.03.200829.02.200429.02.200429.02.2004

Formeln der Tabelle
ZelleFormel
B1=DATUM(JAHR(A1)-4;MONAT(A1); TAG(A1)-1)
C1=Datum_J_T(A1;-4;-1)
D1=convert(A1;-4;-1)

Hier der Code der Funktionen in Spalte C:

Function Datum_J_T(rngQ As Range, YearDiff As Long, DayDiff As Long) As Date
If IsDate(rngQ) Then _
Datum_J_T = DateSerial(Year(rngQ) + YearDiff, Month(rngQ), Day(rngQ) + DayDiff)
End Function

Spalte D ist mit Chris' Funktion gerechnet.
Alle verwendeten Zellen sind als Datum formatiert.
@Chris: Deine Funktion Convert ist ein Datum. Warum wandelst du das Datum erst mit
Format(Datum, "dd.mm.yy")
in einen String um? Mit
Convert = Format(Datum, "dd.mm.yy")
wird daraus gleich wieder ein Datum.
Deine Funktion könnte man so schreiben:


Function Convert(x As Range, YearDiff As Long, DayDiff As Long) As Date
If IsDate(x) Then
Convert = (Day(x) + DayDiff) & "." & Month(x) & "." & Year(x) + YearDiff
End If
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Probleme mit Datum - Korrektur
13.10.2008 16:17:56
Erich
Hallo Nadja und Chris,
sorry, im letzten Beitrag habe ich mich bei der convert-Kurzfassung heftig vertan.
Also noch einmal:
 ABCDE
113.10.200812.10.200412.10.200412.10.200412.10.2004
201.03.200829.02.200429.02.200429.02.200429.02.2004

Formeln der Tabelle
ZelleFormel
B1=DATUM(JAHR(A1)-4;MONAT(A1); TAG(A1)-1)
C1=Datum_J_T(A1;-4;-1)
D1=convert(A1;-4;-1)
E1=convert2(A1;-4;-1)

Und hier die Codes:

Function Datum_J_T(rngQ As Range, YearDiff As Long, DayDiff As Long) As Date
If IsDate(rngQ) Then _
Datum_J_T = DateSerial(Year(rngQ) + YearDiff, Month(rngQ), Day(rngQ) + DayDiff)
End Function
Function Convert(x As Range, YearDiff As Long, DayDiff As Long) As Date
Dim Datum As Date, strDatum As String
If IsDate(x) Then
strDatum = Day(x) & "." & Month(x) & "." & Year(x) + YearDiff
Datum = strDatum
Datum = Datum + DayDiff
Convert = Format(Datum, "dd.mm.yy")
End If
End Function
' Kurzfassung von convert:
Function Convert2(x As Range, YearDiff As Long, DayDiff As Long) As Date
If IsDate(x) Then
Convert2 = Day(x) & "." & Month(x) & "." & Year(x) + YearDiff
Convert2 = Convert2 + DayDiff
End If
End Function

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Probleme mit Datum - Korrektur
13.10.2008 16:28:01
Nadja
Danke an alle hab die Lösung soeben gefunden
Musste nur
SMonth = (Format(Now - daysBefore, "mmdd"))
in
SMonth = (Format(Now - daysBefore, "ddmm"))
ändern

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige