エクセルの時刻の考え方

>考え方

エクセルで「1:00」と入力して、関数「VALUE」で中身を確認すると、「0.041667」となっています。

 

f:id:zizamo2193:20200119202831p:plain

この値は、1日(24:00)を1としたときの1:00の割合です。その証拠に、1÷24をしても同じ値が出ますし、24:00のVALUEを確かめると1が出ます。

 

f:id:zizamo2193:20200119202749p:plain

 

>分単位で表す

「1:00」を分単位ですなわち、「60」と変換するにはどうすればよいでしょうか。分というと安直に関数「MINUTE」を使うと、この関数は分部分の抜出を行うだけなので、

 

f:id:zizamo2193:20200119202753p:plain

となって用途がちがいます。こう言う時は、最初の考え方「24Hを1とする」というところから出発して、

 

24Hを1とする

1440minが1

比を考えて、1440:1 = x:0.041667

内積外積の法則より、x = 1440 * 0.041667

 

とするとできます。

 

f:id:zizamo2193:20200119202759p:plain

>日・時・分に分割する

160時間というような時間表示をx日y時間z分に分割して表示したい、というのは労務管理のシーンで非常によくあることです。X日の部分は一日の労働時間が会社の規約によって可変で、7時間45分だったり、8時間だったりするので、任意の時間で割れることが必要です。ここでは仮に7時間45を1日とします。

 

f:id:zizamo2193:20200119202807p:plain

160時間の表示は160:00ではなく、16:00です。これは、エクセルの時刻というのは1900/1/1を起点とした時間として考えるという性質からくるもので、1900/1/1から160時間後は、1900/1/6 16:00です。この前半の日付部分が省略されて16:00となっています。(なお表示形式によっては160:00という表示にすることもできます)分単位であらわすときの*1440をすると、正しい分(160時間 = 9600分)になっていることが確認できます。

 

x日y時間z分という表示形式にしようと思うと、1日の単位の列、1時間の列を用意して、QUOTIENT、MODを使って分割します。

 

f:id:zizamo2193:20200119202812p:plain

>>問題

実務でここではまったのですが、赤丸のところが表示がおかしいです。余りが0になるときに0.00…xまたは60n ÷ 60 = n-1 … 60になってしまっています。

 

f:id:zizamo2193:20200119202817p:plain

160:00 * 1400 をして作った9600と、手打ちで入力した9600を比較すると一目瞭然です。出発点においては同一とされている9600に同じ計算をしたはずなのに結果が異なっています。

 

f:id:zizamo2193:20200119202821p:plain

>>解決

時間に1440を掛けると整数のように表示されますし、エクセルの比較を使ってもその整数と同一であるかのように見えますが、実際は小数点以下の数が隠れていて、割り算をするとそれが悪さをしているようです。これは、ROUNDを使うと解決します。

 

f:id:zizamo2193:20200119202825p:plain

整数のように見えている数字を整数に丸めて、本当に見えている通りの数字にしてしまってから計算をする、という方法です。