Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1716to1720
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

Laufzeit ohne Wochenende berechnen

Laufzeit ohne Wochenende berechnen
14.10.2019 14:37:03
Andreas
Hallo,
ich habe ein Problem. Ich habe eine Datumsangabe mit Uhrzeit, und möchte das Enddatum und die Enduhrzeit ohne Wochenende und Feiertage berechnen. Mit der Funktion Arbeitstag habe ich es schon probiert, aber die Uhrzeit wird nicht berücksichtigt. Die Lösung kann gerne auch in VBA sein, Hauptsache das Ergebnis stimmt.
Hier das Muster, wie es aussehen soll:
Startzeit Laufzeit Zielzeit
11.10.2019 20:00 36:00:00 15.10.2019 08:00
Schon jetzt Vielen Dank an alle für eine mögliche Lösung.

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: geht schon mit NETTOARBEITSTAGE.INTL() und ...
14.10.2019 15:05:15
neopa
Hallo Andreas,
... ergänzend Rundungsfunktionen und Addition der Stundenanteil vom Start- und Endtag.
Nachfolgend müssen lediglich noch die freie Tage als 4. Argument der Funktion NETTOARBEITSTAGE.INTL() von Dir übergeben werden.
Arbeitsblatt mit dem Namen 'Tabelle2'
 ABC
1Fr 11.10.2019 20:0036:00Di 15.10.2019 08:00

ZelleFormatWert
A1TTT TT.MM.JJJJ hh:mm11.10.2019 20:00:00
B1[h]:mm1,5
C1TTT TT.MM.JJJJ hh:mm15.10.2019 08:00:00

ZelleFormel
B1=NETTOARBEITSTAGE.INTL(AUFRUNDEN(A1;0);KÜRZEN(C1;0)-1%%%;1)+1-REST(A1;1)+REST(C1;1)
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Gruß Werner
.. , - ...
Anzeige
AW: geht schon mit NETTOARBEITSTAGE.INTL() und ...
14.10.2019 15:58:04
Andreas
Hallo Werner,
Vielen Dank für Deine schnelle Antwort. Ich will aber die Zelle C1 berechnen. A1 und B1 sind vorgegeben. Ist das auch möglich?
Schon jetzt Vielen Dank für Deine Unterstützung.
jetzt mal ohne Feiertage
14.10.2019 16:28:35
WF
Hi,
=A1+B1+MAX((WOCHENTAG(A1+B1)={1;7})*2)
WF
AW: jetzt mal ohne Feiertage
14.10.2019 16:36:51
Andreas
OKAY,
aber wenn das Datum in Zelle A1 ein Samstag ist, funktioniert es nicht. Und wie können die Feiertage berücksichtigt werden?
Gruß Andreas
Du willst ohne WE. Warum dann Beginn Sa?
14.10.2019 18:25:57
lupo1
AW: wieso Sa? Sein Startdatum ist ein Fr owT
14.10.2019 20:19:08
neopa
Gruß Werner
.. , - ...
Habs nicht so wie Du getestet/angeschaut. Aber:
14.10.2019 22:03:36
lupo1
So einfach, wie WF's Formel ist, muss man sie (wenn sie denn entsprechend korrigiert ist) von sich aus einen Beginn zu unzulässiger Zeit (WE) schon selbst ausschließen, wenn WE nicht mitgezählt werden soll.
Ist doch irgendwie einleuchtend, oder?
Und bitte nicht solche Dinge in der Formel erledigen, sondern per DÜ.
Anzeige
AW: Habs nicht so wie Du getestet/angeschaut. Aber:
15.10.2019 06:58:05
Andreas
Hallo,
was ist DÜ?
Gruß Andreas
AW: Du willst ohne WE. Warum dann Beginn Sa?
15.10.2019 06:57:04
Andreas
Hallo Lupo1,
es kann vorkommen, das man als Stratdatum einen Samstag hat, daher müßte dies erkannt werden, und entsprechend übersprungen werden.
Das schrieb ich an neopa dazu:
15.10.2019 09:11:16
lupo1
Ist das Startdatum ein unzulässiger Tag, ist das nicht das Problem der Formel. Somit nimmst Du entweder rechnerisch oder manuell den folgenden zutreffenden (Werk)tag (zu Arbeitszeitbeginn).
Davon ist vermutlich auch WF ausgegangen. Wesensfremde Dinge gehören nicht in eine Formel, sondern in die DatenÜberprüfung. Oder in eine Hilfszelle. Deren Formelinhalt kann man dann auch in die eigentliche Formel überführen, aber man sollte den Teil als formelfremd kennzeichnen (Umbrüche) oder erinnern.
Anzeige
AW: Das schrieb ich an neopa dazu:
15.10.2019 09:29:17
Andreas
Hallo Lupo1,
jetzt bin ich total verwirrt. Wie kann ich das umsetzten?
Schon jetzt Vielen Dank für Deine Hilfe!
Gruß Andreas
Es ist müßig, da die FT nicht erledigt wären.
15.10.2019 09:55:07
lupo1
WF's Formel (ohne FT) hatte akademischen Diskussions-Charakter.
C1: Startarbeitszeit (Excel-Zeit)
D1: Endarbeitszeit (Excel-Zeit) (darf nicht kleiner sein, also nur tagsüber)
irgendwo: Feiertage (als Datümer, Bereich als "Feiertage" benennen!)
A2: Start (Excel-DatumZeit)
B2: Stunden (Industriezahl, also Excelzeit * 24. Begründung: Minuszahl möglich!)
C2: =ARBEITSTAG(A2;KÜRZEN((
REST(REST(A2;1)-$C$1;$D$1-$C$1)+B2/24)/($D$1-$C$1));Feiertage)+REST((
REST(REST(A2;1)-$C$1;$D$1-$C$1)+B2/24)/($D$1-$C$1);1)*($D$1-$C$1)+$C$1-(-B2/24&gtREST(A2;1)-$C$1)*(B2&lt0)
als Ende (Excel-DatumZeit)
Geht es nur voran, kannst Du aus allen B2/24 einfach B2 in der Formel machen (und B2 entspr. formatieren).
Denkbar ist natürlich auch die Verwendung von ARBEITSTAG.INTL.
Anzeige
Nachtrag: Rückwärts geht doch nicht ...
15.10.2019 09:59:16
lupo1
... die Feiertage werden dann nicht berücksichtigt (Bug? Oder meine Formel falsch?).
Vielleicht ist das ja bei ARBEITSTAG.INTL behoben. Habe ich jetzt nicht überprüft.
auch mit Beginn am WE (ohne Feiert.)
15.10.2019 13:26:40
WF
Hi,
ist ja nun überflüssig - er hat jetzt eine (elend lange) VBA-Lösung.
=WENN(WOCHENTAG(A1;2)>5;GANZZAHL(A1)-WOCHENTAG(A1;2)+8+B1;A1+B1+(WOCHENTAG(A1+B1;2)>5)*2)
WF
AW: ist aber inkorrekt, gib mal z.B 66:00 vor owT
15.10.2019 16:54:08
neopa
Gruß Werner
.. , - ...
Gib '66:00 vor (mit Hochkomma)
15.10.2019 20:58:30
WF
.
nee, hast Recht
15.10.2019 23:51:31
WF
wenn die Stundenzahl über 2 Tagen ist, gibt's Murks.
AW: nee, hast Recht
16.10.2019 07:55:52
Andreas
Nochmal herzlichen Dank an alle, die mir mit Ihren Beiträgen geholfen haben. Habe das Projekt nun fertig und es funktioniert super.
AW: nun noch der Vollständigkeit halber ...
16.10.2019 10:21:56
neopa
Hallo @all,
... hab ich meine Formel bzgl. dessen, dass eine Startzeit auch an einem Wochenende oder einem Feiertag beginnen kann, dem Ergebnis der Makrolösung angepasst, da Du diese offensichtlich als so für Dich korrekt empfindest und keine weitere Aussage auf meine diesbzgl. Frage gemacht hast. Meine gestern eingestellte Formel musste ich dazu nur wenig erweitern.
In nachfolgend beigefügter Datei https://www.herber.de/bbs/user/132551.xlsm hab ich meine Formellösung und die von Sigi aufgestellte UDF-Lösung aufgezeigt. Meine Tabelle für die Feiertage und sonstigen freien Tage kann ausgeblendet werden oder in ein ein anders Tabellenblatt verschoben werden. Dadurch dass diese als "intelligente" Tabelle aufgestellt ist, kann sie einfach ergänzt/geändert/angepasst werden.
Gruß Werner
.. , - ...
Anzeige
AW: Laufzeit ohne Wochenende berechnen
15.10.2019 10:11:09
Sigi
Hallo Andreas,
mit VBA lassen sich deine Probleme lösen. Starttermin kann Wochenende, Feiertag oder Arbeitstag sein. Völlig egal. Bei den Feiertagen musst du halt die Tage für deine Region aktivieren.
Startdatum mit Uhrzeit (im Format TT.MM.JJJJ hh:mm) dann VBA-Funktion (mit Unterfunktion, freie Tage):
Function LaufzeitEnde(Start As Date, Dauer As Date) As Date
Dim Dat As Date, Skn As Double, RD As Double
Dim SkV As Double, SkB As Double, TD As Double
Const ZF As Long = 1440
Application.Volatile
SkV = 0
SkB = Round(CDbl(1 * ZF), 0)
TD = SkB - SkV
Dat = CDate(Int(CDbl(Start)))
Skn = Round(CDbl(Start - Dat) * ZF, 0)
RD = Round(CDbl(Dauer) * ZF, 0)
If RD > 0 And Skn Skn = SkV
ElseIf RD > 0 And Skn > SkB Then
Dat = Dat + 1
Skn = SkV
End If
Do While RD > 0
If Not IstFrei(Dat) Then
Do While RD > 0 And Skn = SkV
Skn = Skn + 1
RD = RD - 1
Loop
If RD > 0 And RD > TD Then
Do While RD > TD
Dat = Dat + 1
If Not IstFrei(Dat) Then
RD = RD - TD
End If
Loop
End If
If RD > 0 Then
Dat = Dat + 1
Skn = SkV
End If
Else
Dat = Dat + 1
Skn = SkV
End If
Loop
LaufzeitEnde = Dat + Skn / ZF
End Function
Private Function IstFrei(Dat As Date) As Boolean
Dim FreierTag As Range
Dim frei As Boolean
Dim JJ As Long
Dim DD As Long
Dim OS As Date
If Weekday(Dat, vbMonday) > 5 Then frei = True: GoTo RAUS       'WoE.
JJ = Year(Dat)
If Dat = DateSerial(JJ, 1, 1) Then frei = True: GoTo RAUS       'Neuj.
'If Dat = DateSerial(JJ, 1, 2) Then frei = True: GoTo RAUS       'Ber.
If Dat = DateSerial(JJ, 1, 6) Then frei = True: GoTo RAUS       '3K?.
'If Dat = DateSerial(JJ, 3, 8) Then frei = True: GoTo RAUS       'int.Fr.t.
If Dat = DateSerial(JJ, 5, 1) Then frei = True: GoTo RAUS       'Maif.
'If Dat = DateSerial(JJ, 8, 1) Then frei = True: GoTo RAUS       'Bun.f.
'If Dat = DateSerial(JJ, 8, 8) Then frei = True: GoTo RAUS       'Fri.f.
If Dat = DateSerial(JJ, 8, 15) Then frei = True: GoTo RAUS      'Mar.H.
'If Dat = DateSerial(JJ, 9, 20) Then frei = True: GoTo RAUS      'W.K.t.
If Dat = DateSerial(JJ, 10, 3) Then frei = True: GoTo RAUS      'dt.Einh.
'If Dat = DateSerial(JJ, 10, 31) Then frei = True: GoTo RAUS     'Ref.
If Dat = DateSerial(JJ, 11, 1) Then frei = True: GoTo RAUS      'Allh.
'If Dat = DateSerial(JJ, 11, 23) - _
Weekday(DateSerial(JJ, 12, 24)) _
Then frei = True: GoTo RAUS          'BuB
'If Dat = DateSerial(JJ, 11, 26) Then frei = True: GoTo RAUS     'Nat.f.
'If Dat = DateSerial(JJ, 12, 8) Then frei = True: GoTo RAUS      'Mar.Emp.
If Dat = DateSerial(JJ, 12, 24) Then frei = True: GoTo RAUS     'hl.Abd.
If Dat = DateSerial(JJ, 12, 25) Then frei = True: GoTo RAUS     'Whn1
If Dat = DateSerial(JJ, 12, 26) Then frei = True: GoTo RAUS     'Whn2
If Dat = DateSerial(JJ, 12, 31) Then frei = True: GoTo RAUS     'Silv.
DD = (((255 - 11 * (JJ Mod 19)) - 21) Mod 30) + 21
OS = DateSerial(JJ, 3, 1) + DD + (DD > 48) + 6 - ((JJ + JJ \ 4 + DD + (DD > 48) + 1) Mod 7)
If Dat = OS - 2 Then frei = True: GoTo RAUS         'KarFr.
If Dat = OS + 1 Then frei = True: GoTo RAUS         'OstMo.
If Dat = OS + 39 Then frei = True: GoTo RAUS        'ChrH.
If Dat = OS + 50 Then frei = True: GoTo RAUS        'PfiMo.
If Dat = OS + 60 Then frei = True: GoTo RAUS        'Fronl.
RAUS:
IstFrei = frei
End Function

Grüße
Sigi
Anzeige
AW: Laufzeit ohne Wochenende berechnen
15.10.2019 11:34:08
Andreas
Hallo Sigi,
das funktioniert absolut top. VIELEN VIELEN DANK!!!
AW: Endzeitermittl. mit Berücks. von Feiertagen...
15.10.2019 16:47:58
Feiertagen...
Hallo,
... als reine Formellösung (ab Excelversion 2010; lässt sich aber auch für frühere Versionen umschreiben)
Formellösung bewusst ohne Berücksichtigung von Startzeiten an Feiertagen und Wochenende, weil da für mich nicht geklärt ist, ob und wie dann diese Zeiten berücksichtigt werden sollen. Nachfolgende Formel ließe sich dann aber dafür noch anpassen, wenn geklärt.
Für die Stundenzahl in Spalte B bin ich von max 1000 ausgegangen (darüber kommt dann die Fehlermeldung #ZAHL!) Formel C1 kann nach unten kopiert werden.
Die Feiertagsliste ist "Als Tabelle formatiert" und im Namensmanager anschließend umbenannt zu _Tab_Frei. Dadurch kann diese beliebig auch nach unten erweitert werden und wird korrekt durch Formel automatisch berücksichtigt, so z.B. die freien und Feiertage auch des Folgejahres.
Arbeitsblatt mit dem Namen 'Tabelle1'
 ABCDEF
1Fr 11.10.2019 20:0036:00Di 15.10.2019 08:00  FT_und frei
2Fr 11.10.2019 06:0020:00Mo 14.10.2019 02:00  Di. 01.01.2019
3Fr 11.10.2019 06:0015:00Fr 11.10.2019 21:00   
4Fr 11.10.2019 20:0066:00Mi 16.10.2019 14:00   
5Fr 11.10.2019 12:00130:00Fr 18.10.2019 22:00   
6Fr 11.10.2019 06:00140:00Mo 21.10.2019 02:00   
7Mo 23.12.2019 06:0060:00Mo 30.12.2019 18:00  Do. 31.10.2019
8Mo 23.12.2019 06:0070:00Do 02.01.2020 04:00  Di. 24.12.2019
9     Mi. 25.12.2019
10     Do. 26.12.2019
11     Di. 31.12.2019
12     Mi. 01.01.2020
13     Mo. 06.01.2020
14      

ZelleFormel
C1=AGGREGAT(15;6;AGGREGAT(15;6;ZEILE(INDEX(A:A;A1):INDEX(A:A;A1+9+B1*3))/(ZÄHLENWENN(_Tab_Frei[FT_und frei];ZEILE(INDEX(A:A;A1):INDEX(A:A;A1+9+B1*3)))=0)/(REST(ZEILE(INDEX(A:A;A1):INDEX(A:A;A1+9+B1*3));7)&gt1);ZEILE(A$1:A$42));1+KÜRZEN(B1+REST(A1;1);0))+REST(B1+A1;1)
Verwendete Systemkomponenten: [Windows (32-bit) NT 6.02] MS Excel 2010
Diese Tabelle wurde mit Tab2Html (v2.6.0) erstellt. ©Gerd alias Bamberg

Gruß Werner
.. , - ...
Anzeige

19 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige