エクセル引き算関数の真相!存在しない理由と実務時短テク決定版
オフィスの現場から社内ヘルプデスクやIT部門に寄せられる相談の中で、圧倒的に多いのが「日付や時間の引き算をした瞬間にセルが####で埋め尽くされた」というトラブルです。この現象はエクセルが数値を管理する内部ロジック「シリアル値」の仕様に起因しています。
エクセルは1900年1月1日を「1」とし、1日経過するごとに整数を1ずつ加算する仕組み(1900年日付システム)を採用しています。時間は「1日=24時間=1.0」として小数値(例:12時間は0.5)で計算されます。このシステム上、「負の日付や時間」は存在しない不正な値として扱われるため、引き算の結果が0未満になった瞬間にセル幅に関係なく####エラーが表示されます。
エクセル引き算時間計算において、夜勤やシフト管理などで日跨ぎ勤務(例:22:00出勤、翌日07:00退勤)の勤務時間を算出する場合、単純に「=退勤時間 - 出勤時間」と入力するとマイナス計算となりエラーが発生します。この問題を解決するプロの標準数式は以下の通りです。
=退勤時間-出勤時間+(退勤時間<出勤時間)
エクセルでは、論理式(退勤時間<出勤時間)が「真(TRUE)」になると数値の「1(=24時間)」として扱われるため、IF関数を使わずに極めてシンプルな1行で日跨ぎ計算を完結させることができます。
また、エクセル引き算日付日数計算においては、2つの日付の単純差分(=終了日-開始日)で経過日数が求められますが、営業日ベースで計算したい場合はNETWORKDAYS関数、年・月・日の単位を指定して勤続年数等を割り出す場合はDATEDIF関数を使い分けるのが鉄則です。