メインコンテンツへ
実用ガイド

Excel 日時関数の使い方 - DATE と NETWORKDAYS の実務応用

シリアル値の理解 - 日時を数値として扱う仕組み

Excel が内部で日時を扱う方法を理解することは、関数を使いこなす前提となります。Excel は日付を「1900 年 1 月 1 日を 1 とする経過日数」のシリアル値で保持しており、2026 年 5 月 21 日は 46163 という整数になります。時刻は小数で表現され、12:00 は 0.5、18:00 は 0.75 です。日付と時刻を組み合わせた「2026-05-21 18:00」は 46163.75 となり、すべての日時演算は数値計算として処理されます。

この仕組みのおかげで、日付の差は単純な引き算で求められます。終了日 - 開始日 = 経過日数、終了時刻 - 開始時刻 = 経過時間が直感的に動きます。一方で、Excel には 1900 年 2 月 29 日が存在するというバグが残されています。これは Lotus 1-2-3 との互換性のために残された有名な問題で、1900-1-1 から 1900-2-28 までの計算には 1 日のずれが含まれます。実務で 1900 年代初頭の日付を扱うことはまずないため、ほとんどのユーザーには影響しません。

DATE と TIME - 任意の日時を組み立てる

DATE(年, 月, 日) は 3 つの整数から日付を組み立てる関数です。DATE(2026, 5, 21) は 2026 年 5 月 21 日のシリアル値を返します。引数が範囲外でも自動的に正規化されるのが便利な特徴で、DATE(2026, 13, 1) は自動的に 2027 年 1 月 1 日として解釈され、DATE(2026, 0, 31) は 2026 年 1 月 31 日になります。月末日の翌日を求めるなど、月またぎの計算で重宝します。

TIME(時, 分, 秒) は 0〜1 の範囲の時刻シリアル値を返します。TIME(18, 30, 0) は 0.770833... で、これに DATE の結果を足せば日時を組み立てられます。日付文字列のパース用には DATEVALUE と TIMEVALUE があり、外部システムから取り込んだ "2026/05/21" や "18:30:00" のような文字列をシリアル値に変換できます。Power Query を経由しないシンプルな取り込みでは、これらの関数が頼りになります。

TODAY と NOW - 揮発性関数の扱い

TODAY() は今日の日付、NOW() は現在の日時を返します。どちらも引数を取らない揮発性 (volatile) 関数で、Excel が再計算するたびに値が更新されます。シートを開き直したり、別のセルを編集したりするだけで自動的に更新されるため、「現時点」を反映するレポートで便利な反面、過去のスナップショットを保存したい場合には不向きです。

「入力した瞬間の日時を記録したい」という用途では、TODAY() を直接書くのではなく、Ctrl + ; (今日の日付を貼り付け) や Ctrl + Shift + ; (現在時刻を貼り付け) のショートカットを使うのが定石です。VBA や Office Script を使えるなら、Worksheet_Change イベントで該当セルが編集された瞬間に Now を別セルに書き込む実装で、変更履歴の自動記録が可能です。揮発性関数の使い過ぎはブック全体の再計算を遅くするため、本当に最新値が必要なセルに限定する判断も重要です。

NETWORKDAYS - 営業日数の計算

NETWORKDAYS(開始日, 終了日, [祝日]) は土日を除いた営業日数を返す関数です。例えば NETWORKDAYS("2026-05-04", "2026-05-08") は 5 を返します。第 3 引数に祝日のリスト (祝日を入力したセル範囲) を渡すと、それらも除外されます。日本の祝日カレンダーをシート内に持っておけば、ゴールデンウィークや年末年始の営業日数が一発で計算できます。

週休が土日でない場合は NETWORKDAYS.INTL(開始日, 終了日, 週末コード, [祝日]) を使います。週末コードは 1 (土日) から 17 (火曜のみ) まで、または "0000110" のような 7 文字の文字列で柔軟に指定できます。中東地域 (週末が金土) や、日曜のみ休みの製造業現場など、特殊な勤務体系にも対応できる設計です。シフト勤務の労働時間計算で、SUMPRODUCT と組み合わせて月の労働時間を算出する応用も可能です。

EOMONTH と EDATE - 月単位の日付演算

EOMONTH(基準日, 月数) は指定した月の月末日を返します。EOMONTH(TODAY(), 0) は今月末、EOMONTH(TODAY(), -1) は先月末、EOMONTH(TODAY(), 1) は来月末です。締め日の計算、月次レポートの集計期間指定、サブスクリプションの請求日など、ビジネスでの利用頻度が高い関数です。月末日が 28〜31 で変動することを意識せずに、常に月末を確実に取得できる点が強力です。

EDATE(基準日, 月数) は同じ日付を月単位でずらします。例えば 2026 年 1 月 31 日に EDATE(基準日, 1) を適用すると 2026 年 2 月 28 日が返ります (2 月に 31 日がないため、月末日に丸められる)。住宅ローンの満期日、保険の更新日、サブスクリプションの次回請求日の計算で頼りになる関数で、年単位の場合は EDATE(基準日, 12) のように単純に 12 倍します。月末処理に依存する業務では、EOMONTH と EDATE の組み合わせが鉄板です。

WEEKNUM と ISOWEEKNUM - 週番号の落とし穴

WEEKNUM(日付, 週開始日) は年内の何週目かを返します。第 2 引数で週の開始日を指定でき、日本の慣習なら 1 (日曜開始) または 2 (月曜開始) を選びます。ただし WEEKNUM は「1 月 1 日を含む週を第 1 週とする」というシンプルな定義で、ISO 8601 の週番号定義 (1 月 4 日を含む週を第 1 週とする) とは異なります。海外のシステムや SAP との連携では ISOWEEKNUM(日付) を使うのが正解です。

WEEKNUM と ISOWEEKNUM の差は年末年始に顕著に現れます。2026 年 1 月 1 日 (木) は WEEKNUM では第 1 週ですが、ISOWEEKNUM では 2025 年の第 53 週として扱われます。プロジェクト管理の週次レポートで欧州系のチームと数値が合わないトラブルの典型原因です。週次集計を行うシートでは、自社が WEEKNUM か ISOWEEKNUM のどちらを採用しているかを最初に決め、シート上部にコメントで明記する運用が混乱を防ぎます。

XB!LINE

この記事は役に立ちましたか?

関連記事