スプレッドシートのDAYS関数|引き算・DATEDIFとの違いと残り日数の出し方

スポンサーリンク

「納期まであと何日?」をスプレッドシートで出したいとき、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/319
4年末調整の案内2026/11/3039

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-204204204なし
引き算終了日 − 開始日204-204204204.75なし
DATEDIF開始日, 終了日, 単位204("D")#NUM!204204Y/M/D/MD/YM/YD
DAYS360開始日, 終了日, [方式]201-201201201方式(米国式/ヨーロッパ式)
NETWORKDAYS開始日, 終了日, [祝日]147-147147147なし(祝日を指定)

引き算で端数が出るのは、スプレッドシートが時刻を「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) を試してみてください。

タイトルとURLをコピーしました