Excel In einer Zeile Anfangs und Enddatum ermitteln
Hallo Zusammen,
vielleicht kann mir jemand helfen.
Ich habe eine Excel Tabelle (Urlaubsplan) in der in Spalte A Namen (Herr x,y,..) stehen, in Zeile 1 das fortlaufende Datum (01.01...31.07.). In Zeile 2 beim Namen x steht in irgendeiner Zelle ein U manchmal eins und manchmal mehrere hintereinander und dann irgendwo wieder. Es ist ein Urlaubsplan.
Ist es möglich die Daten auszulesen in der Form, dass vorn der Name steht, in der nächsten Spalte das Datum des ersten Urlaubstags und danach des letzten Urlaubstags?
Hier ein Bsp.
Datum 04.03. 05.03. 06.03. ... 16.04. 17.04. 18.04. 19.04. ... 20.07. 21.07. 22.07. 23.07...
Herr x U U U U U U U U
Herr y U U
Herr z U
Die Ausgabe sollte so aussehen:
Herr x 04.03. 06.03. leer 16.04. 19.04. leer 20.07.
Herr y 21.07. 22.07 leer
Herr z 20.07 leer
Das leer soll eine leere Zelle sein und zur Erkennung dienen, welche Urlaubstage zusammenhängen.
Ich hoffe, ich habe mich verständlich ausgedrückt. Erwähnen möchte ich auch, das ich von VBA und Makros so gut wie keine Ahnung habe.
Excel Version 2003 (11.0).
Vielen Dank schon jetzt für die Hilfe!
vielleicht kann mir jemand helfen.
Ich habe eine Excel Tabelle (Urlaubsplan) in der in Spalte A Namen (Herr x,y,..) stehen, in Zeile 1 das fortlaufende Datum (01.01...31.07.). In Zeile 2 beim Namen x steht in irgendeiner Zelle ein U manchmal eins und manchmal mehrere hintereinander und dann irgendwo wieder. Es ist ein Urlaubsplan.
Ist es möglich die Daten auszulesen in der Form, dass vorn der Name steht, in der nächsten Spalte das Datum des ersten Urlaubstags und danach des letzten Urlaubstags?
Hier ein Bsp.
Datum 04.03. 05.03. 06.03. ... 16.04. 17.04. 18.04. 19.04. ... 20.07. 21.07. 22.07. 23.07...
Herr x U U U U U U U U
Herr y U U
Herr z U
Die Ausgabe sollte so aussehen:
Herr x 04.03. 06.03. leer 16.04. 19.04. leer 20.07.
Herr y 21.07. 22.07 leer
Herr z 20.07 leer
Das leer soll eine leere Zelle sein und zur Erkennung dienen, welche Urlaubstage zusammenhängen.
Ich hoffe, ich habe mich verständlich ausgedrückt. Erwähnen möchte ich auch, das ich von VBA und Makros so gut wie keine Ahnung habe.
Excel Version 2003 (11.0).
Vielen Dank schon jetzt für die Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 195558
Url: https://administrator.de/forum/excel-in-einer-zeile-anfangs-und-enddatum-ermitteln-195558.html
Ausgedruckt am: 23.04.2025 um 02:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo Perle66 und willkommen im Forum!
Wenn ich Deine etwas abenteuerliche Darstellung der Daten richtig interpretiere, sollte das etwa so gehen:
Vorausgesetzt habe ich für die Quelltabelle, dass zwischen den Datumswerten und den Namen keine Zeile frei bleibt und zwischen den Namen und Datumswerten es auch keine leere Spalte gibt.
Für die Zieltabelle müsste ich ggf noch ein Löschen der bereits vorhandenen Einträge einbauen ...
Grüße
bastla
[Edit] Zeilen 31 und 34 angepasst, sodass für jeden Urlaub insgesamt 3 Zellen verwendet werden [/Edit]
Wenn ich Deine etwas abenteuerliche Darstellung der Daten richtig interpretiere, sollte das etwa so gehen:
Sub Urlaubszusammenfassung()
Quelle = "Tabelle1" 'Name der Quelltabelle
AbZeileQ = 1 'Zeile, in welcher die Datumswerte stehen
AbSpalteQ = 1 'Spalte, in welcher die Mitarbeiternamen stehen
Ziel = "Tabelle2" 'Name der Zieltabelle
AbZeileZ = 1 'Zeile, ab welcher die Ergebnisdaten eingetragen werden sollen
AbSpalteZ = 1 'Spalte, ab welcher die Ergebnisdaten eingetragen werden sollen
Kennz = "U" 'Kennzeichen, nach welchem gesucht werden soll
ZeileQ = AbZeileQ + 1 'Beginne in Quelltabelle in der Zeile mit erstem Mitarbeiter
ZeileZ = AbZeileZ 'Beginne in der Zieltabelle in der ersten Ergebniszeile
MA = Worksheets(Quelle).Cells(ZeileQ, AbSpalteQ).Value 'Mitarbeiternamen lesen
Do While MA <> "" 'Solange ein Mitarbeitername gefunden wird, Schleife durchführen
SpalteQ = AbSpalteQ + 1 'Beginne in der Quelltabelle in der Spalte mit dem ersten Datumswert
SpalteZ = AbSpalteZ + 1 'Beginne in der Zieltabelle in der Spalte nach dem Mitarbeiternamen
Beginn = "" 'Beginndatum des Urlaubszeitraumes löschen
Worksheets(Ziel).Cells(ZeileZ, AbSpalteZ).Value = MA 'Mitarbeiternamen in vorgegebene Spalte der Zieltabelle übertragen
Dat = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ).Value ' Datumswert aulsesen
Do While Dat <> "" 'Solange es noch Datumswerte gibt, Schleife wiederholen
If Worksheets(Quelle).Cells(ZeileQ, SpalteQ).Value = Kennz Then ' Wenn das Kennzeichen in der Zeile des MA gefunden wird ...
If Beginn = "" Then '... und nicht bereits ein Urlaubsbeginn voerher erkannt wurde ...
Worksheets(Ziel).Cells(ZeileZ, SpalteZ).Value = Dat ' ... Urlaubsbeginn in Zieltabelle eintragen und ...
Beginn = Dat ' ... Beginndatum zwischenspeichern
SpalteZ = SpalteZ + 1 'nächster Eintrag in Zieltabelle erfolgt in nächster Spalte
End If
Else ' kein Urlaubstag
If Beginn <> "" Then ' Wenn laufender Urlaub ...
Ende = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ - 1).Value ' ... als Enddatum den gestrigen Tag festlegen
If Beginn <> Ende Then ' Wenn Beginn und Ende unterschiedlich (mehrtätiger Urlaub) ...
Worksheets(Ziel).Cells(ZeileZ, SpalteZ).Value = Ende ' ... Enddatum eintragen
'SpalteZ = SpalteZ + 1 'nächster Eintrag in Zieltabelle erfolgt in nächster Spalte
End If
Beginn = "" 'Beginndatum des Urlaubszeitraumes löschen
SpalteZ = SpalteZ + 2 'nächster Eintrag in Zieltabelle erfolgt in übernächster Spalte - dadurch leere Zelle(n) nach Urlaub
End If
End If
SpalteQ = SpalteQ + 1 'nächsten Tag des Jahres betrachten ...
Dat = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ).Value '... und dessen Datumswert zwischenspeichern
Loop 'alle Datumswerte (des Jahres) durch
ZeileQ = ZeileQ + 1 'nächste Zeile für Mitarbeiter in Quelltabelle
ZeileZ = ZeileZ + 1 'nächste Zeile für Mitarbeiter in Quelltabelle
MA = Worksheets(Quelle).Cells(ZeileQ, AbSpalteQ).Value'Mitarbeiternamen lesen
Loop 'alle Mitarbeiter durch
MsgBox "Fertig."
End Sub
Für die Zieltabelle müsste ich ggf noch ein Löschen der bereits vorhandenen Einträge einbauen ...
Grüße
bastla
[Edit] Zeilen 31 und 34 angepasst, sodass für jeden Urlaub insgesamt 3 Zellen verwendet werden [/Edit]
Zitat von @bastla:
Hallo Perle66 und willkommen im Forum!
Wenn ich Deine etwas abenteuerliche Darstellung der Daten richtig interpretiere, sollte das etwa so gehen:
Vorausgesetzt habe ich für die Quelltabelle, dass zwischen den Datumswerten und den Namen keine Zeile frei bleibt und zwischen den Namen und Datumswerten es auch keine leere Spalte gibt.
Für die Zieltabelle müsste ich ggf noch ein Löschen der bereits vorhandenen Einträge einbauen ...
Grüße
bastla
[Edit] Zeilen 31 und 34 angepasst, sodass für jeden Urlaub insgesamt 3 Zellen verwendet werden [/Edit]
Hallo Perle66 und willkommen im Forum!
Wenn ich Deine etwas abenteuerliche Darstellung der Daten richtig interpretiere, sollte das etwa so gehen:
Sub Urlaubszusammenfassung()
> Quelle = "Tabelle1" 'Name der Quelltabelle
> AbZeileQ = 1 'Zeile, in welcher die Datumswerte stehen
> AbSpalteQ = 1 'Spalte, in welcher die Mitarbeiternamen stehen
> Ziel = "Tabelle2" 'Name der Zieltabelle
> AbZeileZ = 1 'Zeile, ab welcher die Ergebnisdaten eingetragen werden sollen
> AbSpalteZ = 1 'Spalte, ab welcher die Ergebnisdaten eingetragen werden sollen
> Kennz = "U" 'Kennzeichen, nach welchem gesucht werden soll
>
> ZeileQ = AbZeileQ + 1 'Beginne in Quelltabelle in der Zeile mit erstem Mitarbeiter
> ZeileZ = AbZeileZ 'Beginne in der Zieltabelle in der ersten Ergebniszeile
> MA = Worksheets(Quelle).Cells(ZeileQ, AbSpalteQ).Value 'Mitarbeiternamen lesen
> Do While MA <> "" 'Solange ein Mitarbeitername gefunden wird, Schleife durchführen
> SpalteQ = AbSpalteQ + 1 'Beginne in der Quelltabelle in der Spalte mit dem ersten Datumswert
> SpalteZ = AbSpalteZ + 1 'Beginne in der Zieltabelle in der Spalte nach dem Mitarbeiternamen
> Beginn = "" 'Beginndatum des Urlaubszeitraumes löschen
> Worksheets(Ziel).Cells(ZeileZ, AbSpalteZ).Value = MA 'Mitarbeiternamen in vorgegebene Spalte der Zieltabelle übertragen
> Dat = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ).Value ' Datumswert aulsesen
> Do While Dat <> "" 'Solange es noch Datumswerte gibt, Schleife wiederholen
> If Worksheets(Quelle).Cells(ZeileQ, SpalteQ).Value = Kennz Then ' Wenn das Kennzeichen in der Zeile des MA gefunden wird ...
> If Beginn = "" Then '... und nicht bereits ein Urlaubsbeginn voerher erkannt wurde ...
> Worksheets(Ziel).Cells(ZeileZ, SpalteZ).Value = Dat ' ... Urlaubsbeginn in Zieltabelle eintragen und ...
> Beginn = Dat ' ... Beginndatum zwischenspeichern
> SpalteZ = SpalteZ + 1 'nächster Eintrag in Zieltabelle erfolgt in nächster Spalte
> End If
> Else ' kein Urlaubstag
> If Beginn <> "" Then ' Wenn laufender Urlaub ...
> Ende = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ - 1).Value ' ... als Enddatum den gestrigen Tag festlegen
> If Beginn <> Ende Then ' Wenn Beginn und Ende unterschiedlich (mehrtätiger Urlaub) ...
> Worksheets(Ziel).Cells(ZeileZ, SpalteZ).Value = Ende ' ... Enddatum eintragen
> 'SpalteZ = SpalteZ + 1 'nächster Eintrag in Zieltabelle erfolgt in nächster Spalte
> End If
> Beginn = "" 'Beginndatum des Urlaubszeitraumes löschen
> SpalteZ = SpalteZ + 2 'nächster Eintrag in Zieltabelle erfolgt in übernächster Spalte - dadurch leere Zelle(n) nach Urlaub
> End If
> End If
> SpalteQ = SpalteQ + 1 'nächsten Tag des Jahres betrachten ...
> Dat = Worksheets(Quelle).Cells(AbZeileQ, SpalteQ).Value '... und dessen Datumswert zwischenspeichern
> Loop 'alle Datumswerte (des Jahres) durch
> ZeileQ = ZeileQ + 1 'nächste Zeile für Mitarbeiter in Quelltabelle
> ZeileZ = ZeileZ + 1 'nächste Zeile für Mitarbeiter in Quelltabelle
> MA = Worksheets(Quelle).Cells(ZeileQ, AbSpalteQ).Value'Mitarbeiternamen lesen
> Loop 'alle Mitarbeiter durch
> MsgBox "Fertig."
> End Sub
>
Für die Zieltabelle müsste ich ggf noch ein Löschen der bereits vorhandenen Einträge einbauen ...
Grüße
bastla
[Edit] Zeilen 31 und 34 angepasst, sodass für jeden Urlaub insgesamt 3 Zellen verwendet werden [/Edit]
Hallo
diese vba code Intressiert mich auch , könnte man diesen script so abändern das es auch klein geschriebene u auch übernimmt und mein dazu kommt es noch das unsere MA von Montag bis Freitag U eintragen und am Samstag und Sonntag steht eine X .
Die Urlaubstage sollten nicht durch die x Unterbrochen werden.
zb.
MO DI MI DO FR Sa So MO DI MI DO FR Sa So MO DI
01.01 02.01 03.01 04.01 03.01 04.01 05.01 06.01 07.01 08.01 09.01 10.01 11.01 12.01 13.01 14.01
u u u u x x u u u u u x x u
die ausgabe sollte so ausehen
von 02.01-13.01 10 TU
abgelaufene datum soll gelöscht werden oder ignoriert werden.
Es wäre toll wenn es möglich wäre wenn man die Urlaubstage der MA nach Monaten untereinander dargestellt werden.
würde mich freuen wenn jemand mir helfen würde
mfg