目次
1. Excelが時刻の計算で「1分」を失う技術的な背景
Excelで勤務時間や作業時間を計算する際、「10:00 – 9:00」の結果が「1:00」のはずなのに、特定の条件下で「0:59」と表示されたり、計算結果が1分足りなくなったりすることがあります。これはExcelのバグではなく、コンピュータ特有の「浮動小数点誤差」という数値処理の限界が原因です。
Excelは時刻を「シリアル値」という0から1までの小数で管理しています。1日は「1」、1時間は「1/24」、1分は「1/1440」です。しかし、「1/1440」という数値は2進数で表現すると無限小数になり、メモリに格納する際に末尾がわずかに切り捨てられます。この「目に見えない極小の不足」が積み重なると、Excelは「0.99999…分」を「0分」と切り捨てて判定してしまい、結果として1分の誤差が生じるのです。
2. 手順①:TEXT関数による「正規化」で誤差を切り捨てる
最も手軽で効果的なのが、TEXT関数を使って時刻を一度文字列の書式に当てはめ、再び数値に戻す方法です。これにより、目に見えない桁のゴミを掃除できます。
- 時刻の引き算を行うセルに次の数式を入力します。
- =TEXT(B2-A2, “h:mm”)*1
- 「*1」を加えることで、TEXT関数で文字列になった時刻を再びExcelが計算可能な「シリアル値」に変換します。
この操作を通すと、内部で「0.0416666666666666」といった中途半端な数値になっていたシリアル値が、正確な1時間の値(0.0416666666666667)に丸められ、誤差が消滅します。
3. 手順②:MROUND関数で「1分単位」に吸着させる
計算結果を他の数式(給与計算など)に利用する場合、MROUND関数を使って「最も近い1分」に強制的に吸着させるのが安全です。
- 数式を =MROUND(B2-A2, “0:01”) と記述します。
- 第2引数の「”0:01″」は1分を意味します。
- これにより、内部的に「59秒.999…」となっていても、四捨五入の要領で「60秒(1分)」として処理されます。
時間の切り捨て(FLOOR)や切り上げ(CEILING)を行う前段階でこのMROUNDを挟むことで、演算誤差による「予期せぬ切り捨て」を完璧に防ぐことが可能になります。
4. 手順③:微小時間を足して「不足分」をカバーする
FLOOR関数やINT関数で「分」を取り出す際に誤差が出る場合は、計算式に「ごくわずかな時間」をプラスする古典的な補正術が有効です。
- 数式の例: =(B2-A2+”0:00:05″)*1440
- 計算結果に5秒程度の微小な値を加算してから切り捨てを行うことで、内部的な数値不足による繰り下げを回避します。
- この方法は、特に関数を使わずに数値をシリアル値から「分(整数)」に変換して管理したい実務現場で重宝されます。
5. 誤差が発生しやすいケースと対策の比較
| 発生シーン | 原因の正体 | 推奨される対策 |
|---|---|---|
| 勤務時間の集計 | 15分単位の切り捨て時に1分減る | TEXT関数による正規化 |
| 時刻の比較判定 | 同じ時刻なのにIF関数で不一致になる | MROUND(“0:01”)で値を固定 |
| シリアル値の変換 | 24時間超の計算で端数が出る | ROUND関数または秒の加算 |
まとめ:時刻計算の「不整合」を論理的に封じ込める
Excelにおける時刻の1分誤差は、画面に表示されている「見かけの数値」と、Excelが裏側で持っている「真の数値」の乖離によって生じます。この乖離を解消するためには、Excel任せにせず、数式の段階で「どの精度までを有効とするか」を明示的に指定してあげることが重要です。
TEXT関数による書式の再適用や、MROUNDによる単位の固定は、一見すると回り道な処理に思えるかもしれません。しかし、これらの一手間を加えることで、給与計算のミスやデータの不整合といった、実務上の重大なリスクを確実に排除できます。コンピュータの数値処理の特性を理解し、誠実な数式設計を行うことで、信頼性の高いワークシートを構築してください。
