
この情報は、コンピューターにログインして費やした時間を表す Excel スプレッドシートに保存されています。
logins time of day amount of time logged in (h:mm)
------ ----------- -------------------------------
login 03:21
logout 05:03 1:42
login 05:47
logout 06:26 0:39
そして、これをこう変えたいのです。
time of day amount of time logged in (mins)
------------- -------------------------------
03:00 - 04:00 39
04:00 - 05:00 60
05:00 - 06:00 16
06:00 - 07:00 26
非常に複雑で、Excel の数式に困惑しています。数式を知っている方がいれば、とても助かります。
答え1
これを行う 1 つの方法は、あまりエレガントではありませんが、この醜い方法を見た後に、より短い方法でこれを行う人がいるかもしれません。おそらく、これが私の試みであり、次の場合にのみ機能しますMS365 Version Of Excel
。
• セルで使用されている数式E2
=LET(
_Data, A2:B5,
_First, TAKE(_Data,1,-1),
_Adjustments, IF(TAKE(_Data,1,1)="Logout",
VSTACK(_First,MROUND(_First,"1:00"),DROP(_Data,1,1)),
DROP(_Data,,1)),
_H2M, 1440,
_TFormat, "hh:mm",
_TimeFrame, WRAPROWS(UNIQUE(_Adjustments,,1),2,CEILING(MAX(_Adjustments),"1:00:00"))*_H2M,
_TSequence, TOCOL(DROP(REDUCE("",SEQUENCE(ROWS(_TimeFrame)),LAMBDA(_x,_y,
LET(_z,INDEX(_TimeFrame,_y,1),_w,INDEX(_TimeFrame,_y,2),
VSTACK(_x,SEQUENCE(,_w-_z,_z))))),1)/_H2M,2),
_Uniq, UNIQUE(HOUR(_TSequence))/24,
HSTACK(TEXT(_Uniq,_TFormat)&" - "&TEXT(_Uniq+1/24,_TFormat),
TOCOL(BYCOL(LOOKUP(_TSequence,_Uniq)*24=TOROW(_Uniq*24),LAMBDA(_b,SUM(--_b))))))
テストケース1:
テストケース2: