Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1932to1936
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datum ü. Zeitraum in Tage zerlegen

Datum ü. Zeitraum in Tage zerlegen
05.06.2023 10:40:21
Damir

Hallo zusammen,

ich habe mal wieder ein Problemstellung, welche ich nicht so ohne weitere Hilfe lösen kann. In meinem Upload "Datum zerlegen" befinden sich zwei Tabellenblätter.
Ich habe Daten von Mitarbeitern, die über einen bestimmten Zeitraum Abwesenheiten im System hinterlegt haben. Meine Auswertung liefert leider nur den Zeitraum und keine Betrachtung pro Tag. Ich könnte natürlich die Auswertung pro Tag ziehen und immer Beginn und Ende auf den ausgewerteten Tag anpassen. Das wäre leider nur ein Workaround den ich ungern machen würde. Daher die Frage an die Experten :) Habt ihr einen anderen Ansatz? oder im Idealfall sogar die perfekte Lösung.


Tabellenblatt Ausgangssituation: Hier befinden sich aktuell meine Daten, welche durch VBA noch in die gewünschte Aufbereitung gebracht werden müssen. Ich habe hier die Spalten Beginn und Ende welche einen Zeitraum einer Abwesenheit darstellen. Zur weiteren Bearbeitung benötige ich je Datum in diesem Zeitraum eine eigene Zeile. Die Zellen A-E bleiben immer gleich, lediglich Beginn und Ende müssten Tageweise erfolgen. Da ich mehrere Tausend Zeilen habe, bietet es sich hier nicht an mit Datenreihen zu arbeiten. Leider konnte ich auch im Forum nichts finden, was mich mit meinem aktuellen Wissensstand weiterbringen könnte.

Die gewünschte Aufbereitung befindet sich im Tabellenblatt Erwartete Lösung:
Hier sind die Informationen in den Zellen A-E gleich nur Beginn und Ende wurden angepasst.

In der Theorie stelle ich mir das wie folgt vor: Zuerst berechne ich in Tagen die Differenz zwischen Beginn und Ende. Die Dezimalzahl sagt aus, wie oft ich in VBA vermutlich über eine Schleife hochzählen muss um jeweils die Zeilen zu erzeugen. Des Weiteren reicht es, wenn in der Ausgabe auch nur ein Feld "Datum" entsteht, da Beginn und Ende ja gleich sind. Die Personalnummer ist hier das alleinstellungsmerkmal. Ich müsste es also hinbekommen, immer wenn eine neue Personalnummer in Spalte A steht, dann wiederhole die Prozess, bis wir am Ende angekommen sind und in Spalte A keine weitere Personalnummer mehr folgt.

Sollten sich noch Fragen ergeben, bitte einfach stellen.

Vielen Dank!

Damir :)

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datum ü. Zeitraum in Tage zerlegen
05.06.2023 17:41:22
Luschi
Hallo Damir,

mit Excel Power Query ist das kein Problem (easy peasy):
- keine Formeln
- kein Vba
- man muß nur dran denken, die PQ-Abfragen zu aktualisieren mit Strg+ Alt+F5

https://www.herber.de/bbs/user/159477.xlsx

Gruß von Luschi
aus klein-Paris


als VBA-Makro
05.06.2023 18:45:18
Daniel
Hi
für die genannte Datenmenge gehst so warhscheinlich am schnellsten.
da das im Prinzip eine Formellösung ist (die man auch ohne VBA gut durchführen könnte), erfolgt die Ausgabe auf dem zweiten Blatt:

Sub test()
With Sheets(1)
    .Columns(1).Insert
    .Cells(1, 1).Value = 1
    .Cells(2, 1).Value = 2
    With .Range(.Cells(3, 1), .Cells(Rows.Count, 2).End(xlUp).Offset(1, -1))
        .FormulaR1C1 = "=R[-1]C+R[-1]C[7]-R[-1]C[6]+1"
        .Formula = .Value
    End With
    With Sheets(2).Cells(1, 1).Resize(WorksheetFunction.Max(Sheets(1).Columns(1)) - 1, 8)
        .Columns(1).FormulaR1C1 = "=Match(Row(),'" & Sheets(1).Name & "'!C1,1)"
        .Columns(2).Resize(, 5).FormulaR1C1 = "=Index('" & Sheets(1).Name & "'!C,RC1)"
        .Cells(1, 7).Resize(, 2).FormulaR1C1 = "=Index('" & Sheets(1).Name & "'!C,RC1)"
        .Columns(7).Offset(1, 0).Resize(.Rows.Count - 1).FormulaR1C1 = "=IF(RC1=R[-1]C1,R[-1]C+1,Index('" & Sheets(1).Name & "'!C,RC1))"
        .Columns(8).Offset(1, 0).Resize(.Rows.Count - 1).FormulaR1C1 = "=RC[-1]"
        .Formula = .Value
        .Columns(7).Resize(, 2).NumberFormat = "DD.MM.YYYY"
        .Columns(1).Delete shift:=xlToLeft
    End With
    .Columns(1).Delete
End With
End Sub
Gruß Daniel

Anzeige

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige