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

VBA:Datum subtrahieren

Forumthread: 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
Anzeige

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
Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

Datum subtrahieren in Excel: VBA-Lösungen


Schritt-für-Schritt-Anleitung

Um ein Datum in Excel um Monate, Tage oder Wochen zu subtrahieren, kannst Du VBA verwenden. Hier sind die Schritte, um ein Datum um 3 Monate zu subtrahieren:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.

  3. Füge den folgenden Code ein, um das Datum um 3 Monate zu subtrahieren:

    Sub Datum_minus_3_Monat()
       Dim lZeile As Long
       For lZeile = 2 To Range("A65536").End(xlUp).Row
           Range("F" & lZeile).FormulaR1C1 = "=EDATUM(RC[-5],-3)"
       Next lZeile
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Führe das Makro aus, um das Datum in Spalte F entsprechend zu aktualisieren.


Häufige Fehler und Lösungen

  • Problem: Excel zieht immer 30 Tage ab, anstatt den gesamten Monat.

    • Lösung: Verwende die EDATUM-Funktion, um sicherzustellen, dass die Monatsgrenze korrekt behandelt wird.
  • Problem: Wenn das ursprüngliche Datum der letzte Tag eines Monats ist, wird das resultierende Datum nicht korrekt angezeigt.

    • Lösung: Stelle sicher, dass Du die Formel MONATSENDE verwendest, um den letzten Tag des Monats zu ermitteln.

Alternative Methoden

Du kannst auch die Funktion DATE nutzen, um ein Datum minus Monate zu berechnen. Hier ein Beispiel:

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

Diese Funktion subtrahiert die gewünschte Anzahl an Monaten vom angegebenen Datum.


Praktische Beispiele

Hier sind einige Beispiele für das Subtrahieren von Daten in Excel:

  1. Datum minus 1 Tag:

    Sub Datum_minus_1_Tag()
       Dim lZeile As Long
       For lZeile = 2 To Range("A65536").End(xlUp).Row
           Range("B" & lZeile).Value = Range("A" & lZeile).Value - 1
       Next lZeile
    End Sub
  2. Datum minus 3 Monate:

    Sub Datum_minus_3_Monate()
       Dim lZeile As Long
       For lZeile = 2 To Range("A65536").End(xlUp).Row
           Range("C" & lZeile).Value = EDat(Range("A" & lZeile).Value, 3)
       Next lZeile
    End Sub
  3. Datum minus Wochen:

    Sub Datum_minus_2_Wochen()
       Dim lZeile As Long
       For lZeile = 2 To Range("A65536").End(xlUp).Row
           Range("D" & lZeile).Value = Range("A" & lZeile).Value - 14
       Next lZeile
    End Sub

Tipps für Profis

  • Nutze Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.
  • Teste Deinen Code mit verschiedenen Datumsformaten, um sicherzustellen, dass er robust ist.
  • Verwende MsgBox, um Debugging-Informationen anzuzeigen, wenn Du Probleme beim Ausführen Deines Codes hast.

FAQ: Häufige Fragen

1. Wie kann ich in Excel ein Datum um ein Jahr abziehen? Du kannst die DATE-Funktion verwenden, um ein Jahr zu subtrahieren:

Range("E" & lZeile).Value = DateAdd("yyyy", -1, Range("A" & lZeile).Value)

2. Was passiert, wenn ich ein Datum minus Monate abziehe und der Monat weniger Tage hat? Excel passt das Ergebnis automatisch an, indem es das korrekte Datum im nächsten Monat verwendet.

3. Wie gehe ich vor, wenn ich mehrere Monate oder Tage von einem Datum abziehen möchte? Du kannst die DateAdd-Funktion verwenden, um flexibel Monate oder Tage abzuziehen.

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