Ich habe folgende beutzerdefinierte Funktion für einen Dienstplan erarbeitet erarbeitet, die den Dienstbeginn automatisch errechnen soll:
Option Explicit
Function Beginn(Zeile As Range) As Single
' Variablen definieren
Dim i As Byte
' Spalten in denen Schichten eingetragen sein können
For i = 1 To 48
Select Case UCase(Cells(Zeile.Row, i + 2).Value)
Case "1", "GA", "GS", "GZ", "GD", "BR", "PH", "PL", "PP", "HM"
Exit For
End Select
Next i
' kein Eintrag
If i = 49 Then
i = 0
' 06:00 - 24:00
Else
If i < 38 Then
i = (i + 11)
' 00:30 - 05:30
Else
i = (i - 37)
End If
End If
Beginn = i / 2
End Function
Das funktioniert auch wie gewünscht nur leider stelle ich ein seltsames Verhalten bei Excel fest, auf das ich mir keinen Reim machen kann:
Ich habe mehrere Worksheets in denen ich diese Funktion benutze.
Wenn ich nun mehr als ein Worksheet als Gruppe selektiere und dann irgendwo auf dem Blatt Zeilen lösche, oder einen Bereich verschiebe dann zeigt er auf allen Worksheets nur noch die Werte des ursprünglich aktiven Worksheets an.
Ist schwer zu erklären, am besten mal ausprobieren:
1. Selektiere die Blätter "Mo" und "Di". "Mo" als aktives Blatt.
2. Lösche irgendeine Zeile (z.B Zeile 10)
3. Sieh dir jetzt das Blatt "Di" an. Die Werte in B2, B3 und B5 sind nicht mehr jene, die sie ursprünglich waren, bzw. jene die durch die Funktion errechnet wurden. Es stehen jetzt die Werte drin, die an der gleichen Stelle auf dem Blatt "Mo" stehen.
Ist das ein Bug, oder übersehe ich etwas?
Hier der Link zur Datei:
https://www.herber.de/bbs/user/23753.xls
Gruß,
Philip