「納期まであと何日?」をスプレッドシートで出したいとき、DAYS・引き算・DATEDIFのどれを使えばいいか迷いませんか。
見よう見まねで書いてみたら、結果がマイナスになったり思わぬエラーが出たり。原因がわからないまま数式をいじると、時間ばかり過ぎてしまいます。
この記事では、GoogleスプレッドシートのDAYS関数の書き方を結論から紹介します。残り日数や経過率の実務例に加え、似た関数との使い分け、詰まったときの直し方も順番に見ていきましょう。
スプレッドシートのDAYS関数の構文|終了日が先、開始日が後
結論:=DAYS(終了日, 開始日) で日数が出る
DAYS関数(読み方: デイズ)は、2つの日付の間の日数を返す関数です。英語の days(日数)が、そのまま名前になっています。
=DAYS(終了日, 開始日)
| 引数 | 必須 | 入れるもの |
|---|---|---|
| 終了日 | 必須 | 期間の終わりの日付(第1引数) |
| 開始日 | 必須 | 期間の始まりの日付(第2引数) |
いちばんの注意点は、終了日が先に来ること。「後の日付を先に書く」と覚えておけば迷いません。公式ヘルプによると、うるう年も考慮して計算してくれます。
たとえばA2に開始日「2026/4/1」、B2に終了日「2026/10/22」が入っているとしましょう。=DAYS(B2, A2) と書くと、結果は「204」になります。
セル参照・直接入力・DATE関数との併用
日付の渡し方は3通りあります。どれも結果は同じ「204」です。
=DAYS(B2, A2)
=DAYS("2026/10/22", "2026/4/1")
=DAYS(DATE(2026,10,22), DATE(2026,4,1))
普段使いなら、1行目のセル参照がおすすめ。日付を書き換えるだけで、結果も自動で変わります。
2行目のように直接入力するときは、日付を必ずダブルクォーテーションで囲みましょう。公式ヘルプの使用例も引用符付きです。
検証用のシートでは、"2026/10/22" と "2026-10-22" の形式はどちらも日付として読み取られました。一方、ヘルプの例にある月/日/年形式("10/22/2026"、"7/24/1969")は #VALUE! になりました。日本語の環境では「年/月/日」で書くのが安全です。
DAYS360やNETWORKDAYSの公式ヘルプには、気になる注意書きがあります。引用符なしの「10/10/2000」は、日付ではなく割り算として扱われるというものです。DAYSでも、引用符なしの書き方は避けておくのが無難でしょう。
年・月・日が別々のセルにあるなら、3行目のようにDATE関数で日付を作ってから渡します。ただしDATEは、範囲外の日を翌月に繰り上げます。DATE(2026,2,30) はエラーにならず、2026/3/2になる点に気をつけてください。
実務で使うDAYS関数の例|残り日数・経過率・列一括
TODAY関数で残り日数・経過日数を出す
期限までの残り日数は、TODAY関数と組み合わせると自動で数えられます。今日が2026/10/22だとして、次の表で試してみましょう。
| 行 | A:タスク | B:期限 | C:残り日数 |
|---|---|---|---|
| 2 | 見積書の提出 | 2026/10/20 | -2 |
| 3 | 契約の更新 | 2026/10/31 | 9 |
| 4 | 年末調整の案内 | 2026/11/30 | 39 |
C2に入れる式はこちらです。下の行へコピーすれば、行ごとに残り日数が出ます。
=DAYS(B2, TODAY())
期限を過ぎた行は、表の「-2」のようにマイナスになります。 開始日からの経過日数がほしいなら、=DAYS(TODAY(), 開始日のセル) と順番を入れ替えるだけ。開始日が2026/4/1なら「204」です。
TODAYは、ファイルを開いたときや編集したとき、日をまたいだときに再計算されます。毎朝数え直す手間がなくなるのは助かりますね。
プロジェクトの経過率を求める
「予定期間のうち、どこまで進んだか」を出したいときは、DAYSを2つ使って割り算します。A2に開始日、B2に終了日を入れておきましょう。
=DAYS(TODAY(), A2) / DAYS(B2, A2)
開始日が2026/4/1、終了日が2026/9/30で、今日が2026/7/1だったとします。分子は91日、分母は182日なので、経過率は0.5。表示形式をパーセントにすれば「50%」と表示されます。
開始前はマイナス、終了後は100%超えになるのが気になる場合もあるでしょう。MINとMAXで、0〜100%の範囲に収めておくと見やすくなります。
=MIN(1, MAX(0, DAYS(TODAY(), A2) / DAYS(B2, A2)))
ARRAYFORMULAで列一括・期限切れ判定
行が増えるたびに式をコピーするのが面倒なら、ARRAYFORMULAで列ごとまとめて計算できます。C2に1つ書くだけで、B列に期限がある行すべてに結果が入る仕組みです。
=ARRAYFORMULA(IF(B2:B="", "", DAYS(B2:B, TODAY())))
IFで空白行を除いているので、期限のない行に意味のない数字が並ぶのを防げます。数字ではなく「期限切れ」と表示したいなら、IFをもう1段重ねましょう。
=ARRAYFORMULA(IF(B2:B="", "", IF(DAYS(B2:B, TODAY())<0, "期限切れ", "あと" & DAYS(B2:B, TODAY()) & "日")))
行の色まで変えたいときは、条件付き書式の出番です。カスタム数式に =AND($B2<>"", $B2
引き算・DATEDIF・DAYS360・NETWORKDAYSとの使い分け
5軸比較表(引数順・負の値・文字列日付・時刻付き・単位指定)
スプレッドシートで日数を出す方法は、DAYSだけではありません。同じ入力で並べると、違いがはっきりします。条件は開始日2026/4/1、終了日2026/10/22です。
| 方法 | 引数の順序 | 基本の結果 | 終了日が前のとき | 文字列日付を渡す | 時刻付き(10/22 18:00) | 単位の指定 |
|---|---|---|---|---|---|---|
| DAYS | 終了日, 開始日 | 204 | -204 | 204 | 204 | なし |
| 引き算 | 終了日 − 開始日 | 204 | -204 | 204 | 204.75 | なし |
| DATEDIF | 開始日, 終了日, 単位 | 204("D") | #NUM! | 204 | 204 | Y/M/D/MD/YM/YD |
| DAYS360 | 開始日, 終了日, [方式] | 201 | -201 | 201 | 201 | 方式(米国式/ヨーロッパ式) |
| NETWORKDAYS | 開始日, 終了日, [祝日] | 147 | -147 | 147 | 147 | なし(祝日を指定) |
引き算で端数が出るのは、スプレッドシートが時刻を「1日の小数」として持っているからです。18:00は0.75日にあたるため、204.75になります。
DAYS360は、1か月を30日とみなして数える関数。公式ヘルプでも、確定利付証券などの金融計算向けとされています。普段の日数計算に使うと実際の日数とずれるので、詳しくはDAYS360関数の記事を見てください。
NETWORKDAYSの147は、土日を除いた平日の数です。開始日と終了日の両方を数えた値になります。同じ検証で、平日の10/21〜10/22は「2」、同じ日どうしは「1」でした。
DAYSとDATEDIFは引数の順序が逆
表の「引数の順序」の列を見ると、DAYSだけが終了日から始まっています。DATEDIF・DAYS360・NETWORKDAYSは、どれも開始日が先です。
=DAYS(B2, A2) ← 終了日が先
=DATEDIF(A2, B2, "D") ← 開始日が先
覚え方は「DAYSは日付の引き算と同じ並び」。B2 - A2 を関数にしたのが DAYS(B2, A2) だと考えると、順番を取り違えにくくなります。
DATEDIF関数は、逆に入れると数値ではなくエラー(#NUM!)が返ります。 DAYSと同じ感覚で並べないよう、注意しましょう。
公式ヘルプには、DATEDIFの結果が日付の形で表示されたときの注意もあります。その場合は、セルの表示形式を「数値」に変えてください。
どれを使うか早見表
| やりたいこと | 使う方法 | 式の例 |
|---|---|---|
| 2つの日付の日数だけ知りたい | DAYS または引き算 | =DAYS(B2, A2) |
| 年数・月数で期間を出したい | DATEDIF | =DATEDIF(A2, B2, "Y") |
| 「◯年◯か月」で表示したい | DATEDIFを2つ | "Y" と "YM" を組み合わせる |
| 土日を除いた営業日を数えたい | NETWORKDAYS | =NETWORKDAYS(A2, B2, 祝日の範囲) |
| 1か月30日で利息などを計算したい | DAYS360 | =DAYS360(A2, B2) |
| 時刻まで含めて差を出したい | 引き算 | =B2 - A2 |
日数だけで足りるなら、DAYSで十分です。年・月の単位が必要になったらDATEDIF、営業日ならNETWORKDAYSに切り替えましょう。
詰まったときの対処|#VALUE!・マイナス・時刻付き
#VALUE!:文字列日付の見分け方とDATEVALUEでの直し方
DAYSの結果が「#VALUE!」になったら、まず日付の入り方を疑いましょう。見た目は日付でも、日付として読み取れない文字列が入っているケースです。検証用のシートでは、"abc" のような読み取れない文字列、全角数字の日付、存在しない日付("2025/2/30")、月/日/年形式の文字列で #VALUE! になりました。なお、空白セルは日付の0として扱われ、エラーではなく大きな数が返ります。
他のシステムから貼り付けたデータなどで起こりがち。見分け方は次の2つです。
- 配置を変えていなければ、文字列は左寄せ、日付は右寄せで表示される
=ISTEXT(A2)の結果がTRUEなら、中身は文字列
=ISTEXT(A2)
文字列だとわかったら、DATEVALUE関数で日付に変換してから渡します。
=DAYS(DATEVALUE(B2), DATEVALUE(A2))
セルの表示形式を「日付」に変えるだけでは、中身が文字列のまま変わらないことがあります。 元データごと直したいなら、DATEVALUEの結果を別の列に出してください。その列を値だけ貼り付けてから、表示形式を日付にする流れが確実です。
結果がマイナスになる原因とABS
マイナスになる原因は、ほぼ2つに絞れます。引数の順序を逆にしたか、終了日が本当に開始日より前か、のどちらかです。
=DAYS(A2, B2) ← 開始日を先に書くと -204
=DAYS(B2, A2) ← 正しい順序なら 204
順序に関係なく日数の大きさだけほしいなら、ABS関数(絶対値を返す関数)で囲めば解決。
=ABS(DAYS(B2, A2))
ただ、残り日数の管理ではマイナスが「期限切れ」の大事なサインになります。ABSで消すと気づけなくなるので、使うのは日数の差だけ見たい場面に絞りましょう。
時刻付き日時の端数の扱い
フォームの回答日時のように時刻が付いた値は、引き算すると204.75のような端数が出ます。日付の部分だけで数えたいなら、INT関数で時刻を切り捨ててから計算するのが確実です。
=DAYS(INT(B2), INT(A2))
=INT(B2) - INT(A2)
INTは小数点以下を切り捨てる関数で、日時から時刻の部分を落とせます。反対に時間単位の差がほしいときは、=(B2 - A2) * 24 で「時間」に換算できます。
引き算の結果が日付や時刻の形で表示されることもあるでしょう。 そのときは、表示形式を「数値」に変えれば日数として読めます。
よくある質問とまとめ
開始日は数えるか
DAYSは開始日を数えません。2026/10/21から2026/10/22までなら、結果は「1」です。
両端を含めたい場合は、最後に1を足しましょう。たとえば4/1〜4/30なら、DAYSは29、1を足して30日間になります。
=DAYS(B2, A2) + 1
営業日だけ数えたい
NETWORKDAYS関数を使います。除外されるのは土日だけで、祝日は自動では除かれません。
祝日の一覧をシートに作り、第3引数でその範囲を渡してください。土日以外を休みにしたい職場なら、NETWORKDAYS.INTLという関数もあります。
Excelでも同じか
Excelにも、同じ名前のDAYS関数があります。Excelで使うときの書き方は、ExcelのDAYS関数の解説を参考にしてください。
まとめ
- 構文は
=DAYS(終了日, 開始日)。後の日付を先に書く - 残り日数は
=DAYS(期限, TODAY())、経過日数は=DAYS(TODAY(), 開始日) - DATEDIF・DAYS360・NETWORKDAYSは開始日が先で、DAYSだけ逆
- 年・月の単位ならDATEDIF、営業日ならNETWORKDAYS(祝日は第3引数)
- #VALUE!は文字列の日付を疑い、DATEVALUEで変換する
- 時刻付きの値は、INTで日付部分にそろえると端数が出ない
DAYS関数は、スプレッドシートの日付計算の中でもいちばん素直な関数です。ほかの日付計算もまとめて押さえたいなら、スプレッドシートの日付計算ガイドもあわせてどうぞ。
まずは手元の表で、=DAYS(B2, A2) を試してみてください。