2.2k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

Ich habe in Spalte A eine Reihe von Zeitangaben wie folgt:

8:30-10
11-12:30
13-14
15-17
16-19
Ich möchte jetzt daraus die effektive Stundenanzahl ermitteln, in diesem
Beispiel wären es 8,0 Stunden. Zu beachten ist, dass die einzelnen
Zeiten mit Zwischenpausen versehen sind oder wie die beiden letzten
Zeiten, sich auch überlappen können.
Das Ganze müsste so aufgebaut werden, dass ich mehrere Tage mit
unterschiedlich vielen Zeitspannen nacheinander abarbeiten kann.
Hat jemand eine Idee?
Gruß Andreas

11 Antworten

0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Hallo Andreas,

Warum benutzt Du so viele Unterschiedliche Zeitformate. Mal gibt's es Sekunden mal nicht. Ich sehe nicht was da berechnet werden soll.

Gruß Hajo
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo,

tja, leider werden mir die Daten so vorgegeben. Ich gehe auch davon aus, dass ich diese vorab wie folgt "aufbereiten" muss:
8:30-10:00
11:00-12:30
13:00-14:00
15:00-17:00
16:00-19:00
Gruß
Andreas
0 Punkte
Beantwortet von hajo_zi Experte (9.1k Punkte)
Halo Andreas,

Ich würde jede Zeit in eine separate Zelle schreiben, dann lässt es sich leichter berechnen. Jetzt ist es ja nur noch ein Format.

Gruß hajo
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

würde Dir das reichen?
Sub Makro1()
Range("C1").FormulaArray = "=SUM(MOD(R1C2:R5C2-
R1C1:R5C1,1))"
End Sub


die Zeiten stehen in A1 bis B5, das Ergenbis erscheint in C1

Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,

das würde nicht funktionieren, da es die Überlappung der letzten beiden Eintragungen nicht berücksichtigt. Es müsste quasi für jede Zeile abgefragt werden, ob es in einer Folgezeile eine Überlappung gibt, die ggf. dann vom Gesamtergebnis abgezogen werden muss. Das Ergebnis im Beispiel muss 8,0 lauten.
Gruß Andreas
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

sorry, den Abzug der Überlappungen hatte ich übersehen.
Per VBA kann ich Dir dann nicht weiter helfen.

In Excel würde ich mit Hilfsspalte(n) arbeiten, ja nach dem wie die tatsächlichen Quelldaten vorliegen.

Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo Andreas,

in Excel würde ich so vorgehen, wie im Anhang dargestellt.
Vielleicht kannst Du davon einem Code ableiten.

Download

Gruß
Rainer
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo,

habe tatsächlich einen Code hingekriegt, der das exakte Ergebnis unter Berücksichtigung evtl. Überlappungen liefert.
In A1:A5 stehen die Anfangszeiten und B1:B5 die Endzeiten. Habe von der Gesamtzeitspanne erst die Pausen und dann die Überlappungen abgezogen, die ich jeweils separat ausgerechnet habe. Sind zwar ein paar Schritte aber scheint zu funktionieren...

Sub Stunden_Erfassung()

Dim ende
Dim spanneZ As Date, pause As Date, uelapp As Date
Range("A1:B5").NumberFormat = "hh:mm"

Range("A1").Select
Selection.End(xlDown).Select
ende = Selection.Row
spanneZ = Cells(ende, 2) - Cells(1, 1)


For n = 1 To Cells(Rows.Count, 1).End(xlUp).Row - 1
pause = pause + Cells(n, 2) - Cells(n + 1, 1)
Next

For n = 1 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(n, 2) > Cells(n + 1, 1) Then
uelapp = uelapp + Cells(n, 2) - Cells(n + 1, 1)
End If
Next

MsgBox spanneZ - pause - uelapp

End Sub

Gruß
Andreas
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hallo Rainer,

super, vielen Dank für deine Formeln, damit kann ich die Ausgangsdaten so aufbereiten, dass mein Code funktionieren kann!!
Prima Hilfe!!!
Gruß
Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi :-) Andreas

vielleicht hilfreich

gruss nighty

Sub makro01()
'Letzte beschriebene zeile eines Worksheets
Cells(1, 1) = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
'Letzte beschriebene Spalte eines Worksheets
Cells(2, 1) = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
'Letzte beschriebene zeile einer Spalte,die 1 steht fuer Spalte A
Cells(3, 1) = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'Letzte beschriebene Spalte einer Zeile,die 4 steht fuer zeile 4
Cells(4, 1) = ActiveSheet.Rows(4).End(xlToRight).Column
End Sub
...