いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Gスプレッドシート)時間の切り上げと切り捨て

 Googleスプレッドシートで、「1時間未満を切り上げる」「15分未満を切り捨てる」といった各種の切り上げ・切り捨てを行う方法についてです。CEILING/FLOOR関数一発で済ませる方法もありますが、ここでは(小数計算の誤差の影響を避ける意味で)TIME関数と組み合わせた方法を試してみます。

  • 時間を秒単位に換算してからCEILING/FLOOR関数やTIME関数と組みわせることで、任意の時間単位での切り上げと切り捨てができます。

手順

1時間単位・1分単位の切り上げと切り捨て

f:id:accs2014:20200629021953p:plain:right:w500

 C2セルに入力されている時間の切り上げと切り捨てを行います。
 具体的には次の4つを行うこととします。
・1時間未満を切り上げる(C4セル)
・1時間未満を切り捨てる(C5セル)
・1分未満を切り上げる(C6セル)
・1分未満を切り捨てる(C7セル)

 C4~C7セルにはそれぞれ次のような式を入力しています。

 C4~C7セル

=TIME(0,0,CEILING(VALUE(TEXT(C2,"[s]")),3600))
=TIME(0,0,FLOOR(VALUE(TEXT(C2,"[s]")),3600))
=TIME(0,0,CEILING(VALUE(TEXT(C2,"[s]")),60))
=TIME(0,0,FLOOR(VALUE(TEXT(C2,"[s]")),60))

 「TEXT(C2,"[s]")」により時間を一旦秒数に換算しています。これはSECOND関数(1から59までしか取得できない)と異なり、時間全体を秒数に換算しています(C2セルの「1:27:38」という時間は「5258」に換算されます)。
 あとはCEILING/FLOOR関数を使って1時間(3600秒)や1分(60秒)単位で切り上げ・切り捨てを行い、最後にTIME関数で時・分・秒形式に直しています。

 例えば1時間未満の切り上げの時に「=TIME(HOUR(C2)+1,0,0)」などとやってしまいたくなりますが、それだと「1:00:00」を「2:00:00」に切り上げてしまうため、全体を秒単位に換算するのがポイントです。
 なお、VALUE関数で秒数を文字から数値に変換してますがこれは省略可能です(以下同様)。
 

f:id:accs2014:20200629021957p:plain:right:w400

 結果はこうなります。

n分単位・n秒単位の切り上げと切り捨て

f:id:accs2014:20200629022000p:plain:right:w500

 ここでは15分単位及び15秒単位での切り上げと切り捨てを行ってみます。
 具体的には次の4つを行います。
・15分未満を切り上げる(C4セル)
・15分未満を切り捨てる(C5セル)
・15秒未満を切り上げる(C6セル)
・15秒未満を切り捨てる(C7セル)

 C4~C7セルにはそれぞれ次のような式を入力しています。

 C4~C7セル

=TIME(0,0,CEILING(VALUE(TEXT(C2,"[s]")),900))
=TIME(0,0,FLOOR(VALUE(TEXT(C2,"[s]")),900))
=TIME(0,0,CEILING(VALUE(TEXT(C2,"[s]")),15))
=TIME(0,0,FLOOR(VALUE(TEXT(C2,"[s]")),15))

 やっていることは最初の例と全く同じで、CEILING/FLOOR関数による切り上げと切り捨ての単位時間が異なるだけです。
 15分は900秒、15秒はそのまま15秒として切り上げ・切り捨てを行っています。
 

f:id:accs2014:20200629022004p:plain:right:w400

 結果はこうなります。

f:id:accs2014:20200629022008p:plain:right:w500

 60分を超える分数や、60秒を超える秒数を単位とした切り上げ・切り捨ても全く同じようにできます。
 ここでは75分単位及び75秒単位での切り上げと切り捨てを行います。
・75分未満を切り上げる(C4セル)
・75分未満を切り捨てる(C5セル)
・75秒未満を切り上げる(C6セル)
・75秒未満を切り捨てる(C7セル)

 C4~C7セル

=TIME(0,0,CEILING(VALUE(TEXT(C2,"[s]")),4500))
=TIME(0,0,FLOOR(VALUE(TEXT(C2,"[s]")),4500))
=TIME(0,0,CEILING(VALUE(TEXT(C2,"[s]")),75))
=TIME(0,0,FLOOR(VALUE(TEXT(C2,"[s]")),75))

 やはり上記の例と異なるのはCEILING/FLOOR関数の第2引数(基準値)だけです。なお75分は4500秒に相当します。
 

f:id:accs2014:20200629022011p:plain:right:w400

 結果はこうなります。
 2:30:00は75分の2倍、1:15:00は同じく1倍にあたります。
 1:28:45は75秒の71倍、1:27:30は同じく70倍にあたります。

注意点

 この方法では、時間の切り上げ・切り捨ての結果が24時間以上になる場合、24時間が切り捨てられてしまい残った時間しか得られないため注意が必要です(TIME関数が24時間以上の時間を返せないため)。
 必要な場合は単純に割り算と余りの計算で時分秒に換算するといった方法が考えられます。