web-dev-qa-db-ja.com

Googleスプレッドシートで時刻が午前0時より前か後かを示すブールテスト

就寝時間と起床時間の差を計算するGoogleシートを作成する仕事をしています。これが私が起こしたいことです:

Sleep time  Wake time   Difference
23:30       6:00        6.50
00:00       6:00        6.00
00:30       6:00        5.50

これが実際に起こることです:

Sleep time  Wake time   Difference
23:30       6:00        -17.50
00:00       6:00        6.00
00:30       6:00        5.50

Difference列の数式は

= (B2 - A2) * 24

この答え のとおり。数値としてフォーマットされます。もちろん問題は真夜中の境界です。私の頭では、23:30が1日目の午後11時30分を意味するのは明らかですが、6:00は2日目の午前6時であることは明らかですが、Gsheetsにとってそれは明確ではありません。だから私は起床時刻の日付に1を加えるという非常に厄介な回避策を試しましたが、それもうまくいきません:

Date        Sleep time  Sleep date time     Wake date   Wake time   Wake date time      Difference
29/05/2019  23:30:00    29/05/2019 23:30:00 30/05/2019  06:00:00    30/05/2019 06:00:00 6.50
30/05/2019  00:00:00    30/05/2019 00:00:00 31/05/2019  06:00:00    31/05/2019 06:00:00 30.00
31/05/2019  00:30:00    31/05/2019 00:30:00 01/06/2019  06:00:00    01/06/2019 06:00:00 29.50

真夜中前に眠りにつくシナリオでは正しく計算されますが、真夜中またはその後に眠りにつくときは正しく計算されません。時刻が深夜前か深夜後かをテストする方法を知っていれば、この解決策は可能だと思います。次のいずれかのオプションのように、単純な比較は機能しません。

= A1 < A2 (where A2 is '00:00:00' formatted as time)

= A1 < "00:00:00"

最初のものは、A1が「23:30」、「00:00」、または「00:30」であるかどうかに関係なくすべてFALSEを返し、2番目のものは同じパラメーターに対してすべてTRUEを返します。

私は明らかな何かを見逃していると確信していますが、このコンテキストで時刻が深夜前か深夜後かをテストする方法がわかりません。方法はありますか?

私は この答え を知っています。これは、時刻を深夜24時30分にフォーマットすることを提案します。これは、時刻を入力するのが簡単になるように、または「イベントを2つに分割する」ために避けたいと思います。それが実際に何を意味するのか私にはよくわかりません。ブールソリューションがある場合、それはより簡単かもしれません。

2
Lou
=ARRAYFORMULA(IF(LEN(A2:A), TEXT(B2:B-A2:A, "hh:mm"), ))

0


=ARRAYFORMULA(IF(LEN(A2:A), TEXT(B2:B-A2:A, "hh:mm")*24, ))

0

1
user0

時刻が午前0時より前か後かを判断するためのより良い方法があることに気づきました。HOURを使用して時間コンポーネントをテストしてください。時間が0〜6の場合、時刻は午前0時以降と見なすことができます。そうでなければそれは前です。

=AND(HOUR(C2)>=0, HOUR(C2)<=6)
0
Lou