Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
768to772
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
768to772
768to772
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA:Datum subtrahieren

VBA:Datum subtrahieren
30.05.2006 15:49:13
Andi
Hallo zusammen,
habe folgendes Problem:
ich habe Zellen, in denen das aktuelle Datum minus 3 Monate berechnet wird.
Leider zieht excel immer 30 tage ab, anstatt einfach den ganzen Monat zu nehmen.
rngTarget.Offset(0, 0).Value = _
DateSerial(Year(Date), Month(Date) - 3, Day(Date))
Wenn der Monat also 28 oder 31 Tage hat, dann stimmt die berechnung nicht mehr.
Wie muss ich das denn dann schreiben?
Danke für Eure Vorschläge
Gruß
Andi

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA:Datum subtrahieren
30.05.2006 16:32:41
serge
Hi Andi
heute minus 3 volle monate wäre den 30.feb [den gibt es nicht 28+2 (von 30-28)den 02.03.06], daher kann deine Formel auch nicht richtig arbeiten.
Serge
AW: VBA:Datum subtrahieren
30.05.2006 17:49:19
Gert
Hallo Andy,
ganz normal ergibt die Formel :
=EDATUM(A2;-3)
den 28.februar 2006. Zelle entsprechend formatieren.
VBA ist nicht mein Bereich.
mfg
Gert
AW: VBA:Datum subtrahieren
30.05.2006 16:33:06
Reinhard
Hi Andi,
probiers mal so
Option Explicit
Sub tt()
Dim n, Abzug
Abzug = CLng(DateValue(Date))
For n = 0 To 2
Abzug = CLng(Abzug) - CLng(länge(Month(Date) - n, Year(Date))) + CLng(länge(Month(Date) - n - 1, Year(Date)))
Next n
MsgBox CDate(Abzug)
End Sub
Function länge(monat, jahr)
länge = CLng(DateValue("1." & monat & "." & jahr))
End Function

Gruß
Reinhard
ps: Ich freue mich über eine Rückmeldung ob diese Antwort hilfreich war oder nicht..
Anzeige
AW: VBA:Datum subtrahieren
30.05.2006 17:26:25
Farnz
Hallo Andi,
Excel zieht nicht einfach 30 Tage ab.
Im Kalender gibt es den 29 bis 31 Februar und für etliche Monate den 31 nicht.
Wenn also das Datum z.B. der 30.05.06 ist dann wären 3 Monate vorher der 30.02.06. Den gibt es aber nicht. Excel zählt dann mit der gewählten Berechnungsformel die überzähligen Tage wieder dazu und errechnet den 02.03.06. als 3-Monatsdifferenz zum 30.05.06.
Du müsstes also in einer zusätzlichen Anweisung (z.B. auch Berücksichtigung von Schaltjahren) festlegen, welchen Tag/Monat Excel nehmen soll, wenn der 3 Monate zurückliegende Monat weniger Tage hat als der aktuelle Monat.
Beispiel:

Sub Test()
If Day(DateSerial(Year(Date), Month(Date) - 3, Day(Date))) _
< Day(DateSerial(Year(Date), Month(Date), Day(Date))) Then
Select Case Month(Target.Value) - 3
Case 2 'Februar
If Day(DateSerial(Year(Date), Month(Date) - 3, 31)) = 2 Then
Tag = 29
Else
Tag = 28
End If
Case 4, 6, 9, 11 'April, Juni, September, November
Tag = 30
End Select
rngTarget.Offset(0, 0).Value = DateSerial(Year(Date), Month(Date) - 3, Tag)
Else
rngTarget.Offset(0, 0).Value = DateSerial(Year(Date), Month(Date) - 3, Day(Date))
End If
End Sub

Gruß
Franz
Anzeige
AW: VBA:Datum subtrahieren - Code Korrektur
30.05.2006 17:35:42
Franz
Hallo Andi,
im Code war noch ein kleiner Fehler

Sub Test()
If Day(DateSerial(Year(Date), Month(Date) - 3, Day(Date))) _
< Day(DateSerial(Year(Date), Month(Date), Day(Date))) Then
Select Case Month(Date) - 3
Case 2 'Februar
If Day(DateSerial(Year(Date), Month(Date) - 3, 31)) = 2 Then
Tag = 29
Else
Tag = 28
End If
Case 4, 6, 9, 11 'April, Juni, September, November
Tag = 30
End Select
rngTarget.Offset(0, 0).Value = DateSerial(Year(Date), Month(Date) - 3, Tag)
Else
rngTarget.Offset(0, 0).Value = DateSerial(Year(Date), Month(Date) - 3, Day(Date))
End If
End Sub

mfg
Franz

Anzeige
DANKE!
31.05.2006 10:51:35
Andi
Hi zusammen,
danke für das viele Feedback! Ich werde das erstmal einbauen müssen und sehen, was hier am besten passt!
Gruß
Andi
AW: VBA:Datum subtrahieren
30.05.2006 17:31:53
Peter
Hallo Andi,
hier sind zwei funktionierende Versionen.
Bei der einen wird immer der Ultimo (Monatsletzter) des Datum minus 3 Monat ermittelt, bei dem anderen wird taggenau das Datum minus 3 MOnate ermittelt.
'
' Ultimo eines Datums minus 3 Monate
'

Sub Datum_minus_3_Monat()
Dim lZeile  As Long
Columns("F").NumberFormat = "dd/mm/yyyy"
For lZeile = 2 To Range("A65536").End(xlUp).Row
Range("F" & lZeile).FormulaR1C1 = _
"=MONATSENDE(RC[-5],-3)"
Next lZeile
End Sub

'
' Datum minus Anzahl ganzer Monate
'

Function EDat(d As Date, m As Integer) As Date
EDat = DateSerial(Year(d), Month(d) - m, Day(d))
End Function

'
' Test der Function: Datum minus Anzahl ganzer Monate
'
Public

Sub MinusTest()
Dim lZeile  As Long
Columns("E").NumberFormat = "dd/mm/yyyy"
For lZeile = 2 To Range("A65536").End(xlUp).Row
Range("E" & lZeile).Value = EDat(Range("A" & lZeile).Value, 3)
Next lZeile
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige

63 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige