Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

[LAMBDA] RESOURCE.HOURS
#1
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.
Antworten Top
#2
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste