Hallo giessel,
habe das Makro noch mal angepasst. Für die hochgeladene Datei habe ich das Ergebnis bis Zeile 1000 geprüft. Funktioniert prinzipiell. Die Zwischenzeilen, die ich als neue Schicht interpretiert hatte, müsste ich noch überarbeiten.
Vielleich kanns Du das Makro noch einmal an der Kopie eines anderen Datensatzes testen.
Gib mir bitte Bescheid, wenns Probleme beim Einbinden in Dein Excel-File gibt. Bei Excel 2010 musst Du eine Excel-Datei mit Makro als anderen Dateityp abspeichern. Ggf. musst Du auch noch die Sicherheitseinstellungen anpassen.
MfG MwieMichel
Option Explicit
’ Hier beginnt die Subroutine
Sub SchichtSumme()
’ Hier werden Variablen definiert
Dim APruefen As Variant, EPruefen As Variant 'Wert pruefen auf Datumsformat
Dim IstWahr As Boolean 'Wahr / Falsch Abfrage von Pruefen
Dim Start As Date, Ende As Date, Summe As Date 'Start, Ende und Differenz als Datum
Dim Schicht As Date, HelpDate As Date 'Schichtdauer und Kriterium fuer Schichtende
Dim DSpalteA As Integer, ZSpalteA As Integer 'Spaltenindex fuer Beginn (Datum und Zeit)
Dim DSpalteE As Integer, ZSpalteE As Integer 'Spaltenindex fuer Ende (Datum und Zeit)
Dim Zeile As Integer 'Zaehler fuer Zeilenvorschub
Dim SSpalte As Integer 'Zeiger fuer die Spalte in der die Summe stehen soll
’ Initialisieren oder Vorgaben fuer Variablen vergeben
Zeile = 1 'Anfang in Zeile 1
DSpalteA = 2 'Datum Anfang in Spalte 2
ZSpalteA = 3 'Zeit Anfang in Spalte 3
DSpalteE = 5 'Datum Ende in Spalte 5
ZSpalteE = 6 'Zeit Ende in Spalte 6
SSpalte = 13 'Summe in Spalte 18 schreiben
Schicht = „14:00“ 'Schicht dauert hoechstens 14 h
’ Finden des ersten Datums oder: Kopfzeilen filtern
APruefen = Cells(Zeile, DSpalteA).Value + Cells(Zeile, ZSpalteA).Value
Do Until IsDate(APruefen)
Zeile = Zeile + 1
APruefen = Cells(Zeile, DSpalteA).Value + Cells(Zeile, ZSpalteA).Value
Loop
Start = APruefen
EPruefen = Cells(Zeile, DSpalteE).Value + Cells(Zeile, ZSpalteE).Value
Ende = EPruefen
HelpDate = Start + Schicht
Do Until APruefen = „“
Do Until Ende > HelpDate
Zeile = Zeile + 1
EPruefen = Cells(Zeile, DSpalteE).Value + Cells(Zeile, ZSpalteE).Value
If Not IsDate(EPruefen) Then
Exit Do
End If
If EPruefen = „“ Then
Exit Do
End If
Ende = EPruefen
If Ende