Zeit rückwärts mit VBA incl. Arbeitszeit
12.07.2016 22:05:01
Michael
Hi Stefan,
in Deiner Datei ist der Wurm drin: da sind so viele schräge Formatierungen, die sonstwas rechnen, nur nicht das, was sie sollen.
Ich habe ein paar Daten erst in den Editor und dann in XL2000 kopiert - neue Datei OHNE irgendeinen komischen Firlefanz...
Die Feiertage errechnet ein Makro von Franz (fcs) - die Liste ist überflüssig.
Ansonsten verwende ich eine UDF, um Feiertage/Wochenenden rauszurechnen:
Option Explicit
Function TageRechnen(Datum As Range, Tage As Range)
Dim anz As Date, i As Long
If Tage.Value = 0 Then
TageRechnen = Datum.Value
Else
anz = Datum.Value
For i = 1 To Tage.Value
Do: anz = anz - 1
Loop Until Weekday(anz, 2) _
https://www.herber.de/forum/archiv/1100to1104/1102794_Feiertage_in_Excel_VBA.html
' Für DIESE Fragestellung habe ich den 24.12. und 31.12. durch "" ersetzt!
On Error Resume Next
Dim intjahr As Integer
Dim x As Integer, y As Date
Dim intI As Integer, arrDatum(1 To 20) As Date, arrText(1 To 20) As String
intjahr = VBA.Year(Datum)
'Ostertag ermitteln
x = (((255 - 11 * (intjahr Mod 19)) - 21) Mod 30) + 21
y = DateSerial(intjahr, 3, 1) + x + (x > 48) + 6 - _
((intjahr + intjahr \ 4 + x + (x > 48) + 1) Mod 7)
intI = 0
intI = intI + 1: arrDatum(intI) = DateSerial(intjahr, 1, 1): arrText(intI) = "Neujahr"
intI = intI + 1: arrDatum(intI) = y - 2: arrText(intI) = "Karfreitag"
intI = intI + 1: arrDatum(intI) = y: arrText(intI) = "Ostersonntag"
intI = intI + 1: arrDatum(intI) = y + 1: arrText(intI) = "Ostermontag"
intI = intI + 1: arrDatum(intI) = DateSerial(intjahr, 5, 1): arrText(intI) = "Maifeiertag"
intI = intI + 1: arrDatum(intI) = y + 39: arrText(intI) = "Christi Himmelfahrt"
intI = intI + 1: arrDatum(intI) = y + 49: arrText(intI) = "Pfingstsonntag"
intI = intI + 1: arrDatum(intI) = y + 50: arrText(intI) = "Pfingstmontag"
intI = intI + 1: arrDatum(intI) = y + 60: arrText(intI) = "Fronleichnam"
intI = intI + 1
arrDatum(intI) = DateSerial(intjahr, 10, 3): arrText(intI) = "Tag der deutschen Einheit"
intI = intI + 1
arrDatum(intI) = DateSerial(intjahr, 11, 1): arrText(intI) = "Allerheiligen"
intI = intI + 1
arrDatum(intI) = DateSerial(intjahr, 12, 25): arrText(intI) = "1. Weihnachtstag"
intI = intI + 1
arrDatum(intI) = DateSerial(intjahr, 12, 26): arrText(intI) = "2. Weihnachtstag"
intI = intI + 1
arrDatum(intI) = y - 48: arrText(intI) = "Rosenmontag"
intI = intI + 1
arrDatum(intI) = DateSerial(intjahr, 12, 24): arrText(intI) = "" ' "Heiligabend"
intI = intI + 1
arrDatum(intI) = DateSerial(intjahr, 12, 31): arrText(intI) = "" ' "Sylvester"
For intI = LBound(arrDatum) To intI
If Datum = arrDatum(intI) Then
Feiertag = arrText(intI)
End If
Next
End Function
Die Datei: https://www.herber.de/bbs/user/106973.xls
Schöne Grüße,
Michael
P.S.: Ich kann Dir nur empfehlen, die Datei mit getrenntem Datum & Zeit aufzubauen und insbesondere, falls die Daten aus einem Import stammen, ein getrenntes Makro zu erstellen, das die Angaben in eine Xl-taugliche Form bringt.