26.11.2017, 21:16
(Dieser Beitrag wurde zuletzt bearbeitet: 26.11.2017, 21:27 von AnneWaterkant.)
Revision 1:
Ich nehme mal an, dass 3 berührte Wochen (somit maximal 15 Werktage) nicht überschritten werden. Dann bekommen wir das auch ohne Zeilensplit hin:
B24: 23.11.2017 11:10:00
C24: 28.11.2017 14:45:00
Die Wochenarbeitszeiten (Vorsicht, genau lesen!):
D1: 54:00
D2[:D21]: =D1+1
E1[:E21]: =VERWEIS(REST(ZEILE()+1;7);{0.2.6};{0.10.6,5})/24+D1
ZEILE(2:19) ausblenden (sonst nervt's!)
Und jetzt kommt die eigentliche Formel, nur noch in einer Zelle, ohne Aufteilung:
D24:
{=SUMME(
WENNFEHLER(EXP(LN(E$1:E$21-
WENNFEHLER(EXP(LN(E$1:E$21-REST($C24-KÜRZEN(KÜRZEN($B24)/7)*7;21)));)-D$1:D$21-
WENNFEHLER(EXP(LN(REST($B24-KÜRZEN(KÜRZEN($B24)/7)*7;21)-D$1:D$21));)));))}
Das mit dem {} kennst Du ja schon von vorhin.
Anmerkung: Für jede benötigte Woche mehr (momentan sind es 3 BERÜHRTE Wochen von einem Arbeitsbeginn bis -ende) erhöhst Du 21 um jeweils 7:
Hoffentlich hast Du meine erste Lösung noch nicht ausprobiert. Falls doch, spar Dir die manuelle Arbeit oben:
Sub WerktagsArbeitsdauerVonBis() 'Konstruktionsmakro
Workbooks.Add xlWorksheet
[D:E].NumberFormat = "[h]:mm"
[D1] = "54:00"
[D2:D21] = "=R[-1]C+1"
[E1:E21] = "=LOOKUP(MOD(ROW()+1,7),{0,2,6},{0,10,6.5})/24+RC[-1]"
[2:19].EntireRow.Hidden = True
[A23:C23] = Split("lfdNr von bis")
[B24] = "11/23/2017 11:10"
[C24] = "11/28/2017 14:45"
[D24].FormulaArray = "=SUM(" & _
"IFERROR(EXP(LN(" & Chr(10) & "R1C[1]:R21C[1]-" & _
"IFERROR(EXP(LN(R1C[1]:R21C[1]-MOD(RC3-TRUNC(TRUNC(RC2)/7)*7,21))),)-" & Chr(10) & "R1C:R21C-" & _
"IFERROR(EXP(LN(MOD(RC2-TRUNC(TRUNC(RC2)/7)*7,21)-R1C:R21C)),))),))"
[B:E].Columns.AutoFit
End Sub
Ich nehme mal an, dass 3 berührte Wochen (somit maximal 15 Werktage) nicht überschritten werden. Dann bekommen wir das auch ohne Zeilensplit hin:
B24: 23.11.2017 11:10:00
C24: 28.11.2017 14:45:00
Die Wochenarbeitszeiten (Vorsicht, genau lesen!):
D1: 54:00
D2[:D21]: =D1+1
E1[:E21]: =VERWEIS(REST(ZEILE()+1;7);{0.2.6};{0.10.6,5})/24+D1
ZEILE(2:19) ausblenden (sonst nervt's!)
Und jetzt kommt die eigentliche Formel, nur noch in einer Zelle, ohne Aufteilung:
D24:
{=SUMME(
WENNFEHLER(EXP(LN(E$1:E$21-
WENNFEHLER(EXP(LN(E$1:E$21-REST($C24-KÜRZEN(KÜRZEN($B24)/7)*7;21)));)-D$1:D$21-
WENNFEHLER(EXP(LN(REST($B24-KÜRZEN(KÜRZEN($B24)/7)*7;21)-D$1:D$21));)));))}
Das mit dem {} kennst Du ja schon von vorhin.
Anmerkung: Für jede benötigte Woche mehr (momentan sind es 3 BERÜHRTE Wochen von einem Arbeitsbeginn bis -ende) erhöhst Du 21 um jeweils 7:
- Vor Zeile 21 entweder 7 oder 14 oder ... Zeilen einfügen
- Dann von D20 bis zum neuen Ende E28 oder E35 oder ... runterkopieren
- Dann in der Formel beide (es sind nur 2) ;21))) auf ;28))) oder ;35))) oder ... ändern.
Hoffentlich hast Du meine erste Lösung noch nicht ausprobiert. Falls doch, spar Dir die manuelle Arbeit oben:
Sub WerktagsArbeitsdauerVonBis() 'Konstruktionsmakro
Workbooks.Add xlWorksheet
[D:E].NumberFormat = "[h]:mm"
[D1] = "54:00"
[D2:D21] = "=R[-1]C+1"
[E1:E21] = "=LOOKUP(MOD(ROW()+1,7),{0,2,6},{0,10,6.5})/24+RC[-1]"
[2:19].EntireRow.Hidden = True
[A23:C23] = Split("lfdNr von bis")
[B24] = "11/23/2017 11:10"
[C24] = "11/28/2017 14:45"
[D24].FormulaArray = "=SUM(" & _
"IFERROR(EXP(LN(" & Chr(10) & "R1C[1]:R21C[1]-" & _
"IFERROR(EXP(LN(R1C[1]:R21C[1]-MOD(RC3-TRUNC(TRUNC(RC2)/7)*7,21))),)-" & Chr(10) & "R1C:R21C-" & _
"IFERROR(EXP(LN(MOD(RC2-TRUNC(TRUNC(RC2)/7)*7,21)-R1C:R21C)),))),))"
[B:E].Columns.AutoFit
End Sub