時間計算の仕組み
切り上げ計算で小数をセルの書式設定で時間表示にしましたが、まさにこの通りで、Excelは数値をむりくり時間や日付表示しています。1日=数値の1となります。1時間は1/24(≒0.041666667)です。
セルの書式設定前
| A | B | C | D | G |
1 |
=1/24 |
=1/24 |
1 |
1 |
1 |
セルの書式設定後
| A | B | C | D | G |
1 |
1:00 |
1:00 |
0:00 |
24:00 |
1900/1/1 |
2 |
書式h:mm |
書式[h]:mm |
書式h:mm |
書式[h]:mm |
書式yyyy/m/d |
また、時間どうしの掛け算や割り算も同様で、例えば9:00 * 3:00は0.375 * 0.125 = 0.046875 = 1:07となります。
切り捨て誤差による問題
「時間計算の仕組み」で取り上げましたが、Excelは数値を時間表示していることがネックになり、
少数値の誤差によりFLOOR関数が期待する結果を出さない場合があります。その例を下記に示します。
切り捨て計算の誤差の例
| A | B | C | D | G |
1 |
あるセルの値を切り捨て |
|
|
0:30 |
=FLOOR(D1,"0:30") |
2 |
引算した結果を切り捨て |
9:00 |
9:30 |
=C2-B2 |
=FLOOR(D2,"0:30") |
計算式の結果
| A | B | C | D | G |
1 |
|
|
|
0:30 |
0:30 |
2 |
G2が0:30にならない |
9:00 |
9:30 |
0:30 |
0:00 |
正しく表示するには以下の計算式にしなければなりません。
時間の計算式
| A | B | C | D | G |
1 |
|
|
|
0:30 |
=FLOOR(D1, "0:30") |
2 |
解決先その1 |
9:00 |
9:30 |
=C2-B2 |
=FLOOR(TIME(HOUR(D2),MINUTE(D2),0),"0:30") |
3 |
解決先その2 |
9:00 |
9:30 |
=C3-B3 |
=FLOOR(VALUE(TEXT(D3, [h]:mm)),"0:30") |