Supportnet / Forum / Tabellenkalkulation
Datum um einen Werktag zurücksetzen
Frage
Hallo zusammen,
ich habe folgendes Problem:
In der Spalte B möchte ich ein kopiertes Datum (aus einer anderen Tabelle) um einen Werktag zurücksetzen.
Beispiel: DI 27.11.2006 -> Mo 26.10.2006
Wenn jedoch der Tag auf einen Montag fällt, dann soll der Freitag gewählt werden. Auch Feiertage sollten berücksichtigt werden.
Kennt hier jeman eine VBA-Lösung? Ich muss das als Funktion in eine Prozedur einbetten.
Danke schon mal.
Antwort 1 von rainberg
Hallo,
anbei ein Vorschlag
Gruß
Rainer
anbei ein Vorschlag
Option Explicit
Sub test()
If Weekday(Range("A1"), 2) = 1 Then
Range("B1").Value = Range("A1").Value - 3
Else
Range("B1").Value = Range("A1").Value - 1
End If
End Sub
Gruß
Rainer
Antwort 2 von rainberg
Hallo nochmal,
wenn sich unter Deinen kopierten Daten auch Samstage und Sonntage befinden, dann nimm diesen Code.
Gruß
Rainer
wenn sich unter Deinen kopierten Daten auch Samstage und Sonntage befinden, dann nimm diesen Code.
Option Explicit
Sub test()
With Range("B1")
Select Case Weekday(Range("A1"), 2)
Case Is = 1
.Value = Range("A1").Value - 3
Case Is = 7
.Value = Range("A1").Value - 2
Case Else
.Value = Range("A1").Value - 1
End Select
End With
End Sub
Gruß
Rainer
Antwort 3 von sas
Beim Ausführen des 1. Codes ergibt sich folgender Fehler:
Typen unverträglich. Ich weiss leider nicht, wie man diesen behebt.
Samstage und Sonntage sind nicht dabei, aber Feiertage.
Gruss
sas
Typen unverträglich. Ich weiss leider nicht, wie man diesen behebt.
Samstage und Sonntage sind nicht dabei, aber Feiertage.
Gruss
sas
Antwort 4 von rainberg
Hallo ???,
bei Deinem kopierten Datum handelt es sich offensichtlich um einen String und nicht um ein echtes Datum.
Habe den Code diesbezüglich angepasst.
Option Explicit
Sub test()
If Weekday(CDate(Right(Range("a1"), 10)), 2) = 1 Then
Range("B1").Value = CDate(Right(Range("A1"), 10)) - 3
Else
Range("B1").Value = CDate(Right(Range("A1"), 10)) - 1
End If
End Sub
Gruß
Rainer
bei Deinem kopierten Datum handelt es sich offensichtlich um einen String und nicht um ein echtes Datum.
Habe den Code diesbezüglich angepasst.
Option Explicit
Sub test()
If Weekday(CDate(Right(Range("a1"), 10)), 2) = 1 Then
Range("B1").Value = CDate(Right(Range("A1"), 10)) - 3
Else
Range("B1").Value = CDate(Right(Range("A1"), 10)) - 1
End If
End Sub
Gruß
Rainer
Antwort 5 von sas
Hallo nochmal,
das Datum wird aus einer anderen Datei in die Spalte B transferiert. Diese enthält das Format "m/d/yyyy".
Die Tabelle sieht folgendermaßen aus:
Spalte A: IDNum
Spalte B: Datum
Spalte C: VNum
Spalte D: FKZNum
Die Werte in C und D werden ebenfalls aus einer xls-Datei
transferiert. Diesbzgl. habe ich mit meinem VBACode auch keine Probleme.
Leider bekomme ich bei o.g. Code wieder den Laufzeitfehler ´13´ Typen unverträglich.
Gruss
Sarah
das Datum wird aus einer anderen Datei in die Spalte B transferiert. Diese enthält das Format "m/d/yyyy".
Die Tabelle sieht folgendermaßen aus:
Spalte A: IDNum
Spalte B: Datum
Spalte C: VNum
Spalte D: FKZNum
Die Werte in C und D werden ebenfalls aus einer xls-Datei
transferiert. Diesbzgl. habe ich mit meinem VBACode auch keine Probleme.
Leider bekomme ich bei o.g. Code wieder den Laufzeitfehler ´13´ Typen unverträglich.
Gruss
Sarah