ジオロケーションを使用して、勤務時間を自動的に記録しています。しかし、私は深夜以降に仕事をすることが多いので、仕事をしている毎日に時間を自動的に「分割」する必要があります。必要な最終結果は、1行あたりの毎日の労働時間だけです。Jan 1st - 2 hours
たとえば、1月1日に作業を開始し、午後10時から午前2時に作業する場合、2時間は1月1日に請求され、残りの2時間は1月2日に請求されます。
以下は、作業エリアに物理的に入るタイミングに基づいて自動生成されたデータの例です。
したがって、考えられる解決策の1つは、このリストを水平方向に転置し、「深夜までに終了しない場合は、次の日に「終了:23:59」と「入力:00:00」のエントリを追加する)というロジックを追加することです。
この場合、次のステップは次のようになります。
しかし、Googleスプレッドシートでデータを転置(?)する方法、または欠落しているフィールドを自動的に生成する方法がわかりません。それとももっと良い解決策がありますか?
試してください:
=ARRAYFORMULA(QUERY(IFERROR({DATEVALUE(F2:F), G2:G}),
"select Col1,sum(Col2)
where Col2 is not null
group by Col1
label sum(Col2)''"))
E2:
=ARRAYFORMULA(QUERY({QUERY(
IFERROR(SPLIT(SUBSTITUTE(FILTER(B1:B, A1:A="entered"), " at ", "♦"), "♦")),
"select Col1+Col2 label Col1+Col2''"); IFERROR(
IF(INDEX(SPLIT(SUBSTITUTE(FILTER(B:B, A:A="exited"), " at ", "♦"), "♦"),,1)<>
INDEX(SPLIT(SUBSTITUTE(FILTER(B1:B, A1:A="entered"), " at ", "♦"), "♦"),,1),
INDEX(SPLIT(SUBSTITUTE(FILTER(B1:B, A1:A="entered"), " at ", "♦"), "♦"),,1)+
"23:59:59.999",))}, "where Col1 is not null order by Col1", 0))
F2:
=ARRAYFORMULA(QUERY({TRANSPOSE(QUERY(TRANSPOSE(SPLIT(
SUBSTITUTE(FILTER(B:B, A:A="exited"), " at ", "♦"), "♦")),,99^99))*1; IFERROR(
IF(INDEX(SPLIT(SUBSTITUTE(FILTER(B:B, A:A="exited"), " at ", "♦"), "♦"),,1)<>
INDEX(SPLIT(SUBSTITUTE(FILTER(B:B, A:A="entered"), " at ", "♦"), "♦"),,1),
INDEX(SPLIT(SUBSTITUTE(FILTER(B:B, A:A="entered"), " at ", "♦"), "♦"),,1)
+"23:59:59", ))}, "where Col1 is not null order by Col1", 0))
G2:
=ARRAYFORMULA(IF(F2:F="",,F2:F-E2:E))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加