Clever-Excel-Forum

Normale Version: [LAMBDA] RESOURCE.HOURS
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
RESOURCE.HOURS

Beschreibung:
Addiert die an der Ressource in Anspruch genommene Zeit als eine Dauer, auch wenn die Ressource darin mehrfach beansprucht wird. Beispiel: Taxi mit mehreren Einzelzahlern gleichzeitig, Maschine mit mehreren Produktionswegen.

Syntax:
=RESOURCE.HOURS(StartEndeArray;Bedingungen;Bedingung)

Beispiel:
1 09:00 10:00
1 10:30 11:00
2 09:30 13:22
1 10:50 13:10
=RESOURCE.HOURS(B$1:C$4;A$1:A$4;ZEILE(A1)) ergibt: 03:40
=RESOURCE.HOURS(B$1:C$4;A$1:A$4;ZEILE(A2)) ergibt: 03:52

Code:
=LAMBDA(SE;Conds;Cond;LET(i;1440;
SUMME(--(NACHSPALTE(SEQUENZ(;i)/i;LAMBDA(b;
SUMME((Conds=Cond)*(NACHZEILE(INDEX(SE;;2)*i+INDEX(SE;;1);
LAMBDA(a;MAX(;MIN(KÜRZEN(a)/i;b)-MAX(REST(a;1);b-1/i))))>0))/i))>0))/i))


Anmerkungen:
Die Endzeit darf nicht größer als 24:00 sein. Sie ist darauf herunter zu kürzen. Denn sonst müssten Kalendertage mit 48:00 (oder länger) statt 24:00 gelten und auch Endzeiten nach diesem Muster geschrieben werden, da sie sonst mit gleichzeitigen Vorgängen des Folgetages kollidieren. Die Spalte Bedingungen könnte entweder im Code auf mehrere erweitert werden, oder sie fasst mit TEXTVERKETTEN mehrere Spalten als eine zusammen.
Im obigen Beispiel stand (herunterkopiert):

=RESOURCE.HOURS(B$1:C$4;A$1:A$4;ZEILE(A1)) ergibt: 03:40
=RESOURCE.HOURS(B$1:C$4;A$1:A$4;ZEILE(A2)) ergibt: 03:52

Was nicht geht, ist ein direktes Spillen der Funktion:

=RESOURCE.HOURS(B1:C4;A1:A4;ZEILE(1:2)) 

Denn sie belegt schon zwei Dimensionen innerhalb, nämlich die 4 Belegungszeiten als Zeilen und die 1440 Minuten als Spalten.

Der eigentliche Knaller der LAMBDA-Welt ist aber nun das Öffnen weiterer Dimensionen:

=NACHZEILE(ZEILE(1:2);LAMBDA(c;RESOURCE.HOURS(B1:C4;A1:A4;c)))

Die Zeilen innerhalb sind sozusagen "verdaut". Mit einem weiteren äußeren NACHZEILE kann man das Konstrukt nun in die dritte Dimension spillen, hier wieder Zeilen (wir haben ja nur Zeilen oder Spalten), und zwar für die Bedingungen 1 und 2 (Ergebnis siehe oben).

Und mit einer =SUMME() drumrum ergibt sich natürlich 07:32