「締め切りまで何営業日ある?」「入社日からの勤続年数を一括で出したい」「残業時間の合計が24時間を超えたら表示がおかしくなった…」
この記事では、実務でよく遭遇する日付・時間の計算をやりたいこと別に逆引きできるようまとめました。
はじめに:Excelの日付・時刻の仕組み
Excelは日付を「シリアル値(整数)」、時刻を「0〜1未満の小数」で管理しています。たとえば2025年1月1日は内部では 45658、正午(12:00)は 0.5 です。
この仕組みを知っておくと、日付の足し算ができる理由やエラーの原因が理解しやすくなります。
1. 今日の日付・現在時刻を自動表示する
| やりたいこと | 数式 | 特徴 |
|---|---|---|
| 今日の日付を表示 | =TODAY() | 日付のみ。開くたびに自動更新 |
| 現在の日時を表示 | =NOW() | 日付+時刻。開くたびに自動更新 |
注意: TODAY() と NOW() は再計算のたびに値が変わります。「記録として残したい日付」には使わないでください。固定したい場合は 今日の日付(Ctrl+;) で直接入力します。
2. 経過日数・勤続年数・年齢を求める
単純な経過日数は引き算でOKです。結果のセルの書式を「数値」に変更してください。
=B2 - A2
「勤続〇年〇ヶ月」「満〇歳」など細かく出すには DATEDIF を使います。関数候補に表示されないため、手入力が必要です。
| 単位 | 取得できる値 | 数式例 |
|---|---|---|
"Y" | 満年数 | =DATEDIF(A2,TODAY(),"Y") |
"YM" | 年未満の端数月数 | =DATEDIF(A2,TODAY(),"YM") |
"MD" | 月未満の端数日数 | =DATEDIF(A2,TODAY(),"MD") |
「勤続3年2ヶ月」のような表示にするには、次のように組み合わせます。
=DATEDIF(A2,TODAY(),"Y")&"年"&DATEDIF(A2,TODAY(),"YM")&"ヶ月"
注意: 開始日 > 終了日のとき #NUM! エラーになります。引数は必ず「古い日付 → 新しい日付」の順にしてください。
3. 〇日後・〇ヶ月後・月末の日付を求める
| やりたいこと | 数式例 | 補足 |
|---|---|---|
| 30日後 | =A2+30 | 数値を足すだけ |
| 3ヶ月後 | =EDATE(A2,3) | 月ずれを防ぐにはEDATE |
| 同月末日 | =EOMONTH(A2,0) | 月末締め処理に便利 |
| 翌月末 | =EOMONTH(A2,1) | 翌月末払いの計算に |
| 月初(1日) | =EOMONTH(A2,-1)+1 | 前月末+1日で月初を取得 |
4. 営業日ベースで期日・日数を計算する
| やりたいこと | 関数 | 数式例 |
|---|---|---|
| 〇営業日後の日付 | WORKDAY | =WORKDAY(A2,10,祝日リスト) |
| 2日付間の営業日数 | NETWORKDAYS | =NETWORKDAYS(A2,B2,祝日リスト) |
ポイント: 別シートに祝日一覧を縦一列で作り、名前定義しておくと管理が楽です。毎年その一覧を更新するだけで全シートに反映されます。
5. 日付から年・月・曜日を取り出す
| 取り出したい情報 | 数式例 | 結果例 |
|---|---|---|
| 年 | =YEAR(A2) | 2025 |
| 月 | =MONTH(A2) | 4 |
| 日 | =DAY(A2) | 15 |
| 曜日名 | =TEXT(A2,"aaaa") | 火曜日 |
| 曜日名(短縮) | =TEXT(A2,"aaa") | 火 |
| 曜日番号(月=1) | =WEEKDAY(A2,2) | 2 |
実務活用: 条件付き書式の数式に =WEEKDAY(A2,2)>=6 を使うと、土日のセルを自動でハイライトできます。シフト表や工程表に便利です。
6. 時間の足し算・引き算と「24時間超え」問題
勤務時間は引き算で求めます。
=C2 - B2 (退勤時刻 - 出勤時刻)
問題は合計が24時間を超えたときです。書式設定を変えないと正しく表示されません。
| 状況 | 書式設定 | 表示 |
|---|---|---|
| 24時間以内 | h:mm | 8:30 |
| 24時間超の合計 | [h]:mm(角カッコが必須) | 30:00(正しく表示) |
注意: 月の残業合計が h:mm のままだと、30時間が「6:00」と表示されます。時間集計セルは必ず [h]:mm に変更してください。時間を給与計算など数値として使いたい場合は =A2*24 で時間数(小数)に変換します。
7. 日付・時刻の表示形式を整える(TEXT関数)
TEXT関数を使うと、日付や数値を任意の文字列に変換できます。他の文字列と連結するときに便利です。
| やりたい表示 | 数式例 | 結果例 |
|---|---|---|
| 2025年4月15日 | =TEXT(A2,"yyyy年m月d日") | 2025年4月15日 |
| 4月15日(火) | =TEXT(A2,"m月d日(aaa)") | 4月15日(火) |
| 令和7年4月15日 | =TEXT(A2,"[$-ja-JP-x-gannen]gge年m月d日") | 令和7年4月15日 |
| 09:30 | =TEXT(A2,"hh:mm") | 09:30 |
注意: TEXT関数の結果は「文字列」です。そのまま計算には使えません。数値に戻す場合は DATEVALUE() や VALUE() を使ってください。
8. よくあるエラーと対処法
| 症状 | 原因 | 対処法 |
|---|---|---|
| 引き算の結果が日付表示になる | 書式が「日付」のまま | 書式を「数値」に変更 |
| 時間合計がおかしい | h:mm 書式のまま | [h]:mm に変更 |
#VALUE! エラー | 日付が文字列として入力されている | DATEVALUE() で変換するか入力し直す |
#NUM!(DATEDIFで) | 開始日 > 終了日になっている | 引数の順序を確認する |
まとめ
日付・時間の計算でつまずく多くの原因は「シリアル値の仕組み」か「セルの書式設定」にあります。エラーが出たときはまずこの2点を確認する習慣をつけると、原因の特定が早くなります。
| やりたいこと | 使う関数・方法 |
|---|---|
| 今日の日付・現在時刻 | TODAY() / NOW() |
| 経過日数・勤続年数・年齢 | 引き算 / DATEDIF() |
| 〇ヶ月後・月末 | EDATE() / EOMONTH() |
| 営業日計算 | WORKDAY() / NETWORKDAYS() |
| 年・月・曜日の取り出し | YEAR() / MONTH() / TEXT() |
| 時間集計(24時間超対応) | 引き算 + 書式 [h]:mm |
| 表示形式の整形・文字列連結 | TEXT() |
