Excelで日付の差を計算する方法!DATEDIFとDAYSの使い分け

Excelで日付の差を計算する方法!DATEDIFとDAYSの使い分け
Excelで日付の差を計算したいときはないでしょうか。

けど、そんな中で悩むことは、

・2つの日付の差をどう計算すればいいかわからない
・日数・月数・年数で計算方法を使い分けられない
・営業日(土日を除いた日数)の数え方がわからない

ですよね。

今回はそんなお悩みを解決する

・Excelで日付の差を計算する方法(DATEDIF関数・DAYS関数・NETWORKDAYS関数)

についてまとめます!

完成イメージ

日付の差を求めたいとき、ただ引き算するだけでは年数や月数をうまく出せません。
今回は
・日数は引き算とDAYS関数、年数・月数はDATEDIF関数、営業日はNETWORKDAYS関数
を使い分けて、開始日から終了日までの差を一覧で出せるようにします。

日付の差をすべて出せた完成表
上の画像が完成形です。開始日と終了日の差が、日数・営業日・年数・月数・年月日で一度に出せるようになります。

なお、日付が逆になってもエラーを出さない書き方や、数式をまとめて入れるVBA、うまくいかないときの対処法(トラブルシュート)もあわせてご紹介します。
早速実装して試してみましょう!

STEP1. 元データを用意する

まずは日付の差を計算したい表を用意します。
A列が案件名、B列が開始日、C列が終了日です。
D列(日数)からH列(期間)までは、これから数式で求めるので空のままにしておきます。
日付は「2024/1/15」のようにスラッシュで区切って入力しましょう。
「2024.1.15」のように別の記号で入力すると、文字列として扱われて計算できないことがあります。
開始日と終了日のサンプル表

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。

案件名 開始日 終了日 日数 営業日 年数 月数 期間
業務システム刷新 2022/4/1 2024/3/31
新製品キャンペーン 2024/2/1 2024/2/29
社内研修 2024/4/8 2024/4/19
採用面接 2024/5/7 2024/6/28
展示会準備 2023/7/3 2024/9/30
基幹DB移行 2023/4/3 2025/3/31
海外出張 2024/9/9 2024/9/20
決算対応 2024/3/1 2024/5/31
Webサイト改修 2025/1/6 2025/2/28
設備点検 2024/11/11 2024/11/15

※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。

STEP2. 日数の差を出す(引き算とDAYS関数)

日数の差は、終了日から開始日を引くだけです。
日数を出したい D2セル に =DAYS(C2,B2) と入力します。
この数式は =C2-B2 と書いても同じ結果になります。
入力したら、フィルハンドルでD11セルまで下にコピーしましょう。
数式をコピーすると、参照する行が自動でずれていきます。
カンタンですね。
日数の差を計算した表

数式はどのセルに入れる?

セルを選んで、数式バーに直接入力するだけです。
実際の入力画面がこちらです。
DAYS関数は (終了日, 開始日) の順に指定します。
順番を逆にすると結果がマイナスになるので注意しましょう。
引き算の =C2-B2 も、同じ日数の差を求める数式です。
DAYS関数の入力画面

STEP3. 営業日を出す(NETWORKDAYS関数)

作業日数を知りたいときは、土日を除いた営業日で数えると便利です。
E2セルに =NETWORKDAYS(B2,C2) と入力し、E11セルまでコピーします。
NETWORKDAYS関数は、開始日と終了日を両端とも含めて数えます。
土日は自動で除外されます。
祝日も外したいときは、第3引数に祝日のセル範囲を指定します。
営業日の差を計算した表

STEP4. 年数・月数の差を出す(DATEDIF関数)

年数や月数の差は、DATEDIF関数を使います。
まずF2セルに =DATEDIF(B2,C2,”Y”) と入力し、F11セルまでコピーします。
これは「満何年」を求める数式です。
次にG2セルに =DATEDIF(B2,C2,”M”) と入力し、G11セルまでコピーします。
こちらは「満何か月」になります。
引き算では出せない差も、DATEDIF関数なら一発で求められます。
年数と月数の差を計算した表

DATEDIF関数の入力画面

DATEDIF関数も数式バーから入力します。
入力中は関数の引数のヒントが表示されます。
第3引数には単位を文字で指定します。
“Y” は年、“M” は月、“D” は日です。
組み合わせの “YM” は「年を除いた月」を返します。
DATEDIF関数の入力画面

STEP5. 「何年何か月何日」で表示する

年数と月数を組み合わせると、「1年2ヶ月27日」のような表示もできます。
H2セルに次の数式を入力し、H11セルまでコピーしましょう。

=DATEDIF(B2,C2,"Y")&"年"&DATEDIF(B2,C2,"YM")&"ヶ月"&DATEDIF(B2,C2,"MD")&"日"

DATEDIF関数を3つつなげて、単位ごとの差を文字で組み合わせています。
& は文字をつなげる記号です。
この書き方にしておくと、年齢や勤続年数の表示にもそのまま使えます。
年月日で表示した期間の列

STEP6. 差がマイナスになるときの対処

終了日が開始日より前だと、引き算の結果はマイナスになります。
下の例では、引き算のC14セルが -10 になっています。
これを避けたいときは IF関数 で条件をつけます。
D14セルに =IF(B14<A14,””,B14-A14) と入力すると、日付が逆のときは空欄になります。
次の行のように日付の順番が正しいときだけ、数字が表示されます。
差がマイナスになるときの対処例

日付の差を出す関数の使い分け

どの関数を使えばよいか、目的ごとにまとめました。
例は、開始日 2023/4/1・終了日 2024/5/10 の場合です。

求めたいもの 使う数式 例の結果
日数(開始日は含まない) =C2-B2 または =DAYS(C2,B2) 405
営業日(土日を除く・両端を含む) =NETWORKDAYS(B2,C2) 290
満年数 =DATEDIF(B2,C2,”Y”) 1
満月数 =DATEDIF(B2,C2,”M”) 13
年の端数の月 =DATEDIF(B2,C2,”YM”) 1
月の端数の日 =DATEDIF(B2,C2,”MD”) 9
年月日でまとめて表示 Y・YM・MDをつなげる 1年1ヶ月9日
POINT

日数の差は 引き算(DAYS関数)、年数・月数は DATEDIF関数、営業日は NETWORKDAYS関数 が基本です。
迷ったら「日数は引き算、単位をつけるなら DATEDIF」と覚えましょう。

VBAで差の列をまとめて入力する

案件が何十件もあるときは、VBAで数式をまとめて入れるとラクです。
Alt+F11 でVBAエディターを開き、標準モジュールに次を貼り付けて実行します。

Sub SetDateDiff()
    Dim lastRow As Long, i As Long
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    For i = 2 To lastRow
        Cells(i, 4).Formula = "=DAYS(C" & i & ",B" & i & ")"
        Cells(i, 5).Formula = "=NETWORKDAYS(B" & i & ",C" & i & ")"
        Cells(i, 6).Formula = "=DATEDIF(B" & i & ",C" & i & "," & """Y""" & ")"
    Next i
End Sub

タカヒロ

タカヒロ
DATEDIF関数は関数の一覧に出てこないので、手で入力します。
単位の “Y” や “M” は、必ずダブルクォーテーション(”)で囲んでくださいね。
引き算で出せない年数・月数も、これなら一発です。

うまくいかないときの対処法(トラブルシュート)

実際に試すと、思ったように動かないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。

症状 原因 対処
#VALUE! エラーになる 日付が文字列として入力されている 「2024/1/15」の形で入力し直す/=DATEVALUE() で変換する
結果が日付で表示される 結果セルの書式が日付になっている 結果セルの表示形式を標準に戻す
結果がマイナスになる 終了日が開始日より前になっている =IF(B2<A2,””,B2-A2) で空欄にする
DATEDIFが #NUM! になる 開始日が終了日より後になっている 日付の前後を確認し、IF関数で回避する
DAYSの結果が1日足りない DAYSは開始日を含めない 開始日も数えるなら =DAYS(C2,B2)+1 にする
営業日が日数より多い NETWORKDAYSは両端を含めて数える 仕様どおり。日数と比べるときは数え方に注意する

関数の説明

今回使う3つの関数の概要です。

DAYS関数(デイズ)

書式 =DAYS(終了日, 開始日)
できること 2つの日付の間の日数を求めます。
戻り値 日数(数値)
こんなときに 開始日から終了日までの日数を出したいとき。
注意 引数は(終了日, 開始日)の順です。逆にするとマイナスになります。開始日は数えません。
=DAYS(C2,B2)

DATEDIF関数(デイトディフ)

書式 =DATEDIF(開始日, 終了日, 単位)
できること 2つの日付の差を、年・月・日の単位で求めます。
単位 “Y”=満年数/”M”=満月数/”D”=日数/”YM”=年の端数の月/”MD”=月の端数の日
こんなときに 年齢・勤続年数・「何年何か月」の期間を出したいとき。
注意 関数の一覧に表示されない関数です。開始日が終了日より後だと #NUM! になります。
=DATEDIF(B2,C2,"Y")

NETWORKDAYS関数(ネットワークデイズ)

書式 =NETWORKDAYS(開始日, 終了日, [祝日])
できること 土日を除いた稼働日(営業日)を数えます。
戻り値 営業日数(数値)
こんなときに 作業日数や納期の営業日を数えたいとき。
注意 開始日と終了日を両端とも含めて数えます。祝日は第3引数に範囲で指定します。
=NETWORKDAYS(B2,C2)

完成

開始日と終了日の差が、日数・営業日・年数・月数・年月日ですべて出せました。
思ったとおりに動きましたか?
日数は引き算(DAYS関数)、年数と月数はDATEDIF関数、営業日はNETWORKDAYS関数と使い分ければ、日付の差はもう迷いません。
一度作っておけば、日付を書き換えるだけで結果が自動で更新されます。
日付の差をすべて出せた完成表

さいごに

いかがでしょうか。

今回は、

・Excelで日付の差を計算する方法(DATEDIF関数・DAYS関数・NETWORKDAYS関数)

についてまとめました。

まずは今回のサンプル表で、ぜひ一度試してみてください。
日付の差を出す関数を使い分けられると、期間の管理やスケジュール作りがぐっとラクになりますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image