Hallo Ralf,
ich denke auch, Du könntest entweder eine möglichst formelfreie VBA-Lösung oder eine möglichst codefreie Formellösung gestalten.
Anbei habe ich mal noch meine VBA-Lösung. Eingetragen werden nur die Kürzel für Urlaub usw. Sollen da auch noch die Namen dazu?
Die Lösung berücksichtigt jedoch keine doppelte Vergabe Freizeiten, da müsste man ggf. die Vorhandenen Einträge mit neuen Einträgen kombinieren.
Ebenso fehlt ggf. noch ein Leeren der Spalten. Es werden also nur in den betreffenden Zeiträumen EInträge vorgenommen.
Im Moment steht beim ermitteln der jeweiligen Spalte irgendwo eine 7. Die kennzeichnet den Abstand von Monat zu Monat. Wenn Du zwischen den Monaten weitere Spalten einfügst, zähle sie dann einfach dazu.
Der Abstand der Halbjahre ist dort mit 40 programmiert. Auch hier gilt, wenn Du dazwischen Zeilen einfügst, entsprechend dazuzählen ...
Sub test()
'Variablendeklarationen
Dim iCnt%
Dim lStart As Date, lEnde As Date
'Schleifenzaehler auf Startwert setzen (erste Datumszeile)
iCnt = 3
'Mit dem Blatt Liste
With Sheets("Liste")
'Schleife ueber alle gefuellten Zeilen in Spalte B ab Zeile 2
Do While .Cells(iCnt, 2) <> ""
'Startdatum merken
lStart = .Cells(iCnt, 2)
'Wenn neben Startdatum Enddatum steht,
If .Cells(iCnt, 3) <> "" Then
'Enddatum merken
lEnde = .Cells(iCnt, 3)
'Wenn nicht,
Else
'Enddatum = Startdatum
lEnde = lStart
'Ende Wenn neben Startdatum Enddatum steht,
End If
'Schleife ueber alle Daten solange Startdatum <= Enddatum
Do While lStart <= lEnde
'Suche des Startdatums im Kalender
'Eintrag U/K/... in gefundene Zelle - offsetiert
Sheets("Urlaubskalender").Cells(3, 3).Offset((Month(lStart) > 6) * -40, _
7 * ((Month(lStart) Mod 6) + ((Month(lStart) Mod 6) = 0) * -6 - 1)).Resize(37, 1).Find(what:=Day(lStart), _
LookIn:=xlValues, lookat:=xlWhole).Offset(0, 3).Value = .Cells(iCnt, 4)
'Startdatum 1 Tag hochsetzen
lStart = lStart + 1
'Ende Schleife ueber alle Daten solange Startdatum <= Enddatum
Loop
'Ende Schleife ueber alle gefuellten Zeilen in Spalte B ab Zeile 2End Sub
iCnt = iCnt + 1
Loop
'Ende mit dem Blatt Liste
End With
End Sub