「プロジェクトの開始日から終了日まで何日あるんだろう?」。スプレッドシートで期限管理をしていると、こんな場面がよくありますよね。
日付を引き算すれば日数は出せますが、数式を見ただけでは「何を計算しているのか」が伝わりにくいです。
GoogleスプレッドシートのDAYS関数を使えば、2つの日付の間の日数を明快に求められます。数式の意図もひと目で読み取れますよ。
この記事ではDAYS関数の基本から実務活用まで解説します。TODAY関数との組み合わせやDATEDIFとの使い分けも紹介しますよ。
DAYS関数とは?スプレッドシートで日数を計算する関数
DAYS関数(読み方: デイズ関数)は、2つの日付の間の日数を整数で返す関数です。
名前は英語の「days(日数)」がそのまま関数名になっています。
たとえば「2025/4/1」と「2025/9/30」の間が何日あるかを、1つの数式で求められます。うるう年の2月29日も自動で考慮してくれるので、手計算の必要はありません。
NOTE
DAYS関数はGoogleスプレッドシートとExcel(2013以降)の両方で使えます。構文も同じなので、ファイルを変換しても数式はそのまま動きますよ。
DAYS関数の書き方|構文と引数
基本構文
=DAYS(終了日, 開始日)
カッコの中に「終了日」「開始日」の2つを順番に入れます。どちらも必須です。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 終了日 | 必須 | 期間の終わりとなる日付(第1引数) |
| 開始日 | 必須 | 期間の始まりとなる日付(第2引数) |
WARNING
引数の順番に注意してください。DAYS関数は終了日が先、開始日が後です。DATEDIF関数は「開始日, 終了日」の順番なので、逆になっている点がよくある間違いポイントですよ。
DAYS関数の基本的な使い方
セル参照で日数を求める
A2に開始日「2025/4/1」、B2に終了日「2025/9/30」が入っているとします。
=DAYS(B2, A2)
結果は「182」です。2つの日付の間には182日あるとわかります。
引数はセル参照で指定するのが基本です。日付データを変更するだけで結果が自動更新されますよ。
日付を直接入力する場合
セルを使わずに、数式内に日付を直接書くこともできます。
=DAYS("2025/9/30", "2025/4/1")
こちらも結果は「182」です。ちょっとした計算のときに便利ですが、日付を変更するたびに数式を書き直す必要があります。普段はセル参照を使いましょう。
DATE関数と組み合わせる
年・月・日がバラバラのセルに入っている場合は、DATE関数(年・月・日から日付を作る関数)を組み合わせます。
=DAYS(DATE(2025,9,30), DATE(2025,4,1))
DATE関数で日付データを作ってからDAYSに渡す形です。結果はもちろん「182」ですよ。
実務で使えるDAYS関数の活用例
残り日数カウント ── TODAY関数との組み合わせ
締め切りまであと何日か知りたいときは、TODAY関数(今日の日付を返す関数)と組み合わせます。
B2に期限日「2026/3/31」が入っているとして、次の数式を入力します。
=DAYS(B2, TODAY())
今日が2026/3/19なら結果は「12」です。期限まで残り12日とわかります。
TODAY関数はファイルを開くたびに自動で更新されます。毎日の残り日数を常に最新の状態で確認できますよ。
TIP
期限を過ぎるとマイナスの値が返ります。たとえば期限が3日前なら「-3」です。マイナスになったら「期限超過」と表示したい場合は、IF関数を組み合わせましょう。
=IF(DAYS(B2, TODAY()) < 0, "期限超過", DAYS(B2, TODAY()) & "日")
プロジェクトの経過率を計算する
プロジェクトの進捗を「経過率」で把握したい場面もありますよね。開始日がA2、終了日がB2に入っているとします。
=DAYS(TODAY(), A2) / DAYS(B2, A2)
分子が「開始日から今日までの日数」、分母が「開始日から終了日までの全日数」です。
A2が「2025/4/1」、B2が「2025/9/30」、今日が「2025/7/1」なら次のようになります。
- 分子: DAYS(“2025/7/1”, “2025/4/1”) = 91日
- 分母: DAYS(“2025/9/30”, “2025/4/1”) = 182日
- 経過率: 91 / 182 = 0.5(50%)
セルの表示形式を「パーセント」にすれば「50%」と表示されます。ガントチャートの代わりに使えて便利ですよ。
日付の引き算とDAYS関数の違い
スプレッドシートでは、日付の引き算でも日数を求められます。
=B2 - A2
A2が「2025/4/1」、B2が「2025/9/30」なら、引き算でも結果は「182」です。DAYS関数と同じ値になります。
では、なぜDAYS関数が用意されているのでしょうか?違いを整理してみましょう。
| 項目 | 日付の引き算(=B2-A2) | DAYS関数(=DAYS(B2,A2)) |
|---|---|---|
| 結果 | 同じ(日数を返す) | 同じ(日数を返す) |
| 時刻を含む場合 | 小数になる(例: 182.5) | 整数のみ(時刻は無視) |
| 数式の読みやすさ | 何を計算しているか分かりにくい | 「日数を求めている」と一目瞭然 |
| チーム共有時 | 意図の説明が必要な場合がある | 関数名で意図が伝わる |
実務的に大きな違いが出るのは「時刻を含む日付」を扱うときです。引き算だと「182.5」のような小数になりますが、DAYS関数なら時刻部分を無視して整数だけを返します。
数式を他の人と共有する場面が多いなら、DAYS関数を使うほうが意図が明確になりますよ。
DATEDIFとの使い分け|引数の順序に注意
引数の順序が真逆
DAYS関数とDATEDIF関数は、引数の順番が逆です。ここが一番混同しやすいポイントなので、しっかり押さえておきましょう。
| 項目 | DAYS関数 | DATEDIF関数 |
|---|---|---|
| 構文 | =DAYS(終了日, 開始日) | =DATEDIF(開始日, 終了日, 単位) |
| 第1引数 | 終了日 | 開始日 |
| 第2引数 | 開始日 | 終了日 |
| 返す値 | 日数のみ | 年・月・日を単位で指定 |
| 逆順のとき | 負の値を返す(エラーなし) | #NUM!エラーが発生 |
特に注目してほしいのが「逆順のとき」の挙動です。DAYS関数は開始日と終了日を逆にしてもエラーにならず、マイナスの値を返します。一方、DATEDIF関数は#NUM!エラーになります。
=DAYS("2025/4/1", "2025/9/30") → -182(エラーなし)
=DATEDIF("2025/9/30", "2025/4/1", "D") → #NUM!(エラー)
DAYS関数のほうがエラーに強いと言えますね。
DAYS・DATEDIF・日付引き算の使い分け早見表
「結局どれを使えばいいの?」と迷ったときは、次の表で判断してみてください。
| やりたいこと | おすすめの方法 | 数式の例 |
|---|---|---|
| 2つの日付の日数だけを知りたい | DAYS関数または引き算 | =DAYS(B2, A2) |
| 年数・月数で期間を求めたい | DATEDIF関数 | =DATEDIF(A2, B2, "Y") |
| 「X年Yヶ月」形式で表示したい | DATEDIF関数 | Y + YM の組み合わせ |
| 土日祝を除いた営業日を数えたい | NETWORKDAYS関数 | =NETWORKDAYS(A2, B2) |
| 数式の意図を明確にしたい | DAYS関数 | =DAYS(B2, A2) |
日数だけで十分な場面ならDAYS関数がシンプルです。年数や月数も必要な場合はDATEDIF関数を使ってください。営業日ベースの計算にはNETWORKDAYS関数(土日祝を除いた日数を返す関数)が適しています。
よくあるエラーと対処法
#VALUE!エラー(日付が文字列の場合)
DAYS関数に渡した値が正しい日付データになっていないと、#VALUE!エラーが発生します。
よくある原因は次の3つです。
- セルに日付が「文字列」として入力されている
- 全角数字が混じっている(例: 「2025/4/1」)
- 存在しない日付を指定している(例: 「2025/2/30」)
対処法は、セルの表示形式を「日付」に変更するか、DATE関数で日付データを作り直すことです。
=DAYS(DATE(2025,9,30), DATE(2025,4,1))
DATE関数を経由すれば、確実に正しい日付データとして処理されます。
結果がマイナスになる場合
DAYS関数は終了日が開始日より前だと、マイナスの値を返します。これはエラーではなく正常な動作です。
=DAYS("2025/4/1", "2025/9/30") → -182
「引数の順番を間違えた」ケースがほとんどです。終了日を第1引数、開始日を第2引数に指定しているか確認してください。
常に正の値がほしい場合は、ABS関数(絶対値を返す関数)で囲む方法もあります。
=ABS(DAYS(A2, B2))
これなら引数の順番に関係なく、常にプラスの日数が返りますよ。
まとめ
DAYS関数は、2つの日付の間の日数を整数で返すシンプルな関数です。
ポイントを整理します。
- 構文は
=DAYS(終了日, 開始日)の2引数 - 終了日が第1引数、開始日が第2引数(DATEDIFとは逆順)
- 戻り値は整数のみ(時刻を含んでいても小数にならない)
=DAYS(期限日, TODAY())で残り日数を自動カウントできる- 日数だけならDAYS関数、年月日単位ならDATEDIF関数と使い分ける
- 引き算でも同じ結果は出るが、DAYS関数のほうが意図が明確
まずは =DAYS(B2, A2) で2つの日付の日数を計算するところから試してみてください。
