Nachtzuschlag (@Tino)
Uwe
die Tage über hab ich Dank Tinos Hilfe eine Prozedur bekommen, die Arbeiten an Samstagen in der Zeit von 13:00 bis 21:00 erkennt
und in eine gesonderte Spalte aufführt. Diese Prozedur funktioniert schlicht perfekt:
Sub Samstag()
Dim ErgebnisBereich As Range
'Funktion BerechneZeiten (steht im Modul ModulFunktion)
'1. Parameter von Zeit (als Uhrzeit)
'2. Parameter bis Zeit (als Uhrzeit)
'3. Parameter Bereich wo Ergebnis hinkommt
'4. Parameter Bereich mit den Wochentagen
'5. bis n ... Parameter Bereich wo die Werte stehen (entsprechend erweiterungsfähig)
With Sheets("TVöD") 'Tabellenname eventuell anpassen
Set ErgebnisBereich = .Range("AD5:AD35") 'Bereich für die Ergebnisse
ErgebnisBereich.Value = "" 'erst mal leer machen
ErgebnisBereich = BerechneZeit(TimeSerial(13, 0, 0), TimeSerial(21, 0, 0), ErgebnisBereich, . _
Range("B5:B35"), .Range("M5:N35"), .Range("Q5:R35"), .Range("U5:V35"))
End With
Range("BL8").Value = WorksheetFunction.Sum([AD5:AD35])
End Sub
Function BerechneZeit(StundeVon As Double, StundeBis As Double, ErgebnisBereich As Variant, _
ArrayWochentag As Variant, ParamArray WerteBereiche() As Variant)
Dim A As Long, B As Long
Dim Werte, ArrayErgebnis
ArrayErgebnis = ErgebnisBereich
With Application.Worksheet
Function 'für min Max Funktion
'Einzelwerte berechnen
For B = LBound(WerteBereiche) To UBound(WerteBereiche) 'Bereiche durchlaufen
Werte = WerteBereiche(B)
For A = 1 To UBound(Werte) 'Schleife über Array
If ArrayWochentag(A, 1) = "Sa" Then
If Werte(A, 2) > StundeVon Then
If Werte(A, 1)
Vielen von Euch haben es sicher bemerkt, das ich immer wieder frage, weil mir immer wieder die gleichen Dinge bisher ein Geheimnis bleiben.
Tinos Prozedur konnte ich bisher nur soweit selber anpassen, als das eben der Zuschlag nunmehr von 0:00 bis 6:00 an jedem Wochentag erkannt wird.
Nunmehr brauche ich aber zwei Varianten, die ich nicht hinbekomme:
Nicht nur eine Zeit eines Zuschlags, sondern zwei Zeiten müssen Berücksichtigung finden. Die erste halt von 0:00 bis 6:00, eine weitere dann von 21:00 bis 24:00. Insoweit wäre der Ergebnisbereich um die Bedingung des zweiten Zuschlags zu erweitern. Wie aber füge ich diese weitere Bedingung dazu, das die Prozedur mir eben Arbeiten in der Zeit von 0:00 bis 6:00 und von 21:00 bis 24:00 zusammenrechnet und in einer gesonderte Spalte aufführt?
Bei der zweiten Variante mache ich vielleicht nur einen Fehler? Ich habe über die nachfolgende Prozedur die Feiertage für das laufende Kalenderjahr ermittelt:
Sub Ostersonntag()
On Error Resume Next
Dim intjahr As Integer
Dim BegDatum, y As Date
Dim x As Integer
Application.ScreenUpdating = False
BegDatum = Worksheets("Start").Range("K10")
Worksheets("Start").Select
Range("K11").Value = Format(Year(BegDatum), "0000")
intjahr = Worksheets("Start").Range("K11")
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)
Worksheets("Feiertage").Range("F11") = DateSerial(intjahr, 1, 1)
Worksheets("Feiertage").Range("F12") = y - 2
Worksheets("Feiertage").Range("F13") = y
Worksheets("Feiertage").Range("F14") = y + 1
Worksheets("Feiertage").Range("F15") = DateSerial(intjahr, 5, 1)
Worksheets("Feiertage").Range("F16") = y + 39
Worksheets("Feiertage").Range("F17") = y + 49
Worksheets("Feiertage").Range("F18") = y + 50
Worksheets("Feiertage").Range("F19") = y + 60
Worksheets("Feiertage").Range("F20") = DateSerial(intjahr, 10, 3)
Worksheets("Feiertage").Range("F21") = DateSerial(intjahr, 11, 1)
Worksheets("Feiertage").Range("F22") = DateSerial(intjahr, 12, 25)
Worksheets("Feiertage").Range("F23") = DateSerial(intjahr, 12, 26)
Worksheets("Feiertage").Range("F25") = y - 48
Worksheets("Feiertage").Range("F26") = DateSerial(intjahr, 12, 24)
Worksheets("Feiertage").Range("F27") = DateSerial(intjahr, 12, 31)
End Sub
Nun möchte ich mit Hilfe Tinos Prozedur z.B. am Karsamstag Arbeiten in der Zeit von 6:00 bis 14:00 in eine andere Spalte aufführen lassen. Hierzu ändere ich die Zeile
If ArrayWochentag(A, 1) = "Sa" Then
in
If ArrayWochentag(A, 1) = y - 1
Funktioniert natürlich nur wenn die Erklährung, was denn nu y ist mit in der Routine steht. Soweit verstehe ich das noch...
Die Prozedur gibt mir, so angepasst, zwar keinen Fehler, funktioniert aber einfach nicht. Was läuft da falsch?
Brauche wirklich Eure Nachhilfe. Solche Prozeduren, mit denen Berechnungen erfolgen schaffe ich bisher einfach noch nicht nachzuvollziehen. Sorry
Besten Dank
Uwe