スプレッドシートで日付を扱っていると、「日」だけを取り出したくなる場面、意外と多いですよね。たとえば営業日報で「毎月25日の売上だけを合計したい」とか、請求書で「毎月15日の支払予定日を自動で作りたい」とか。
手作業でひとつずつ入力するのは現実的ではありません。テキスト関数(MID関数など)で無理やり切り出す方法もありますが、書式が変わった瞬間に切り出し位置がズレてエラーになります。
そんなときに使えるのが DAY関数 です。この記事では、DAY関数の基本から、YEAR・MONTHとの使い分け、実務で役立つ5つの活用パターン、よくあるエラーの対処までまとめて紹介します。
スプレッドシートのDAY関数とは?できることを30秒で理解
DAY関数は、スプレッドシートの日付から 「日」の部分だけを整数で取り出す 関数です。
たとえば「2026/3/19」を渡すと「19」が返ります。返り値は 1〜31の整数 で、月によって28〜31日の範囲で変動します(閏年の2月なら29日まで)。
名前のとおり「Day=日」を取得する、とてもシンプルな関数ですね。
「年」を取り出すYEAR関数の使い方(年を取り出す関数)、「月」を取り出すMONTH関数の使い方(月を取り出す関数)と3つセットで使うと、日付操作の幅がぐっと広がりますよ。
なぜDAY関数が必要なのか
「日付の『日』を取るなら、テキストとしてMID関数で切り出してもいいのでは?」と思うかもしれません。でも、これはおすすめできません。
セル書式が「2026/3/19」「2026-3-19」「2026年3月19日」などに変わると、MID関数では切り出し位置もズレてしまいます。一方でDAY関数は 「日付値から日を取る」ので書式に左右されません。
実務では書式が混在することがよくあるので、日付の「日」を取るならDAY関数が鉄則です。
DAY関数の基本構文と使い方
書き方と引数の説明
DAY関数の構文はとてもシンプルです。
=DAY(日付)
| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 日付 | 必須 | 「日」を取り出したい日付を指定する |
引数はひとつだけ。セル参照や日付関数の結果、日付文字列を渡せます。
セルに入力した日付から「日」を取り出す
もっとも基本的な使い方です。セルA1に「2026/3/19」と入力されている場合、次の数式で「19」が返ります。
=DAY(A1)
日付が入ったセルを指定するだけなので、迷うことはありません。
文字列の日付を直接指定する
数式内に日付を直接書くこともできます。そのときは ダブルクォートで囲む のがポイントです。
=DAY("2026/3/19")
これで「19」が返ります。ダブルクォートを忘れると、次で解説する落とし穴にハマるので注意してください。
TODAY関数と組み合わせて今日の「日」を取得する
TODAY関数の使い方(今日の日付を返す関数)と組み合わせると、常に「今日が何日か」を自動取得できます。
=DAY(TODAY())
今日が3月19日なら「19」が返ります。ファイルを開くたびに自動更新されるので、日次の管理表や営業日報でぜひ使ってみてください。
YEAR・MONTH・DAYの3関数をセットで覚えよう
3関数の比較表
日付を分解する3つの関数をまとめて確認しましょう。
| 関数 | 引数 | 返り値 | 主な用途 |
|---|---|---|---|
| YEAR(日付) | 日付値1つ | 年(例: 2026) | 年だけ抽出・年での集計 |
| MONTH(日付) | 日付値1つ | 月(1〜12) | 月だけ抽出・月別集計 |
| DAY(日付) | 日付値1つ | 日(1〜31) | 日だけ抽出・締め日判定 |
3つとも引数は日付ひとつだけ。返り値が「年・月・日」のどれかという違いだけです。
「年・月・日」をバラバラに取り出して別セルに表示する
A1に「2026/3/19」が入っている場合、次のように3つの関数を並べれば、年・月・日を別々のセルに分解できます。
| セル | 数式 | 結果 |
|---|---|---|
| B1 | =YEAR(A1) | 2026 |
| C1 | =MONTH(A1) | 3 |
| D1 | =DAY(A1) | 19 |
集計やフィルタで「月だけ」「日だけ」を条件にしたいとき、ぜひこの方法を試してみてください。
使い分けの判断基準
「年・月・日のどれを使うか」で迷ったら、次の観点で考えるとわかりやすいです。
- 年単位で集計したい(例: 年次売上) → YEAR関数
- 月単位で集計したい(例: 月別売上) → MONTH関数
- 日単位で何かを判定したい(例: 締め日・月末・毎月固定日) → DAY関数
ピボットテーブルやQUERY関数でグループ化する際、この3関数で補助列を作っておくと一気に処理しやすくなります。
実務で使える5つのユースケース
ユースケース1: 毎月特定日の売上を集計する
売上データで「毎月15日の売上だけを合計したい」というケースです。A列に日付、B列に売上が入っているとします。
=SUMPRODUCT((DAY(A2:A100)=15)*B2:B100)
SUMPRODUCT関数(条件に合う行の値を合計する関数)とDAY関数を組み合わせています。DAY関数で「日」を取り出し、15日に一致する行だけ売上を合計しています。
締め日ベースの集計や、給料日・特定イベント日の売上分析にそのまま使えますよ。
FILTER関数派なら、こちらの書き方でもOKです。
=SUM(FILTER(B2:B100, DAY(A2:A100)=15))
ユースケース2: 毎月固定日の日付をDATE関数で自動生成する
「毎月25日」の支払日を自動で作りたい場合、DATE関数の使い方(年・月・日を指定して日付を作る関数)と組み合わせます。
=DATE(YEAR(TODAY()), MONTH(TODAY()), 25)
YEAR関数とMONTH関数で今の年月を取得し、日を「25」に固定しています。月が変わっても自動で更新されるのがポイントですよ。
請求書の支払期日・定期購買の発注日・引き落とし日の予定表など、「毎月○日」のルーチン業務に応用できます。
ユースケース3: 当月の残り日数・当月日数を計算する
EOMONTH関数(指定月の末日を返す関数)を使うと、当月の残り日数や日数を計算できます。
当月の残り日数:
=EOMONTH(TODAY(),0)-TODAY()
EOMONTH(TODAY(),0) で当月末の日付を取得し、今日の日付を引いています。タスク管理や納期計算で「あと何日あるか」をパッと確認できます。
当月の日数(28〜31日のどれか):
=DAY(EOMONTH(TODAY(),0))
当月末の「日」を取り出せば、その月の日数がすぐわかります。勤怠管理の「今月の稼働日数計算」などで活用できますよ。
同じ要領で、前月・翌月の日数も取得できます。
=DAY(EOMONTH(TODAY(),-1)) ← 前月の日数
=DAY(EOMONTH(TODAY(),1)) ← 翌月の日数
ユースケース4: 月末日かどうかを判定する
「今日が月末かどうか」を判定して、月次処理のトリガーにするパターンです。
=IF(DAY(A1)=DAY(EOMONTH(A1,0)), "月末", "")
DAY(A1) で今日の日、DAY(EOMONTH(A1,0)) でその月の末日(28/29/30/31)を取得。両者が一致すれば「月末」を表示します。
月末処理のチェックリスト・締め作業のリマインダーなどに使えます。条件付き書式と組み合わせて、月末のセルだけ色を変える使い方もおすすめですよ。
ユースケース5: 経過日数・上旬下旬の判定をする
月の何日目かで「上旬・中旬・下旬」を振り分けたいとき、DAY関数で分類できます。
=IF(DAY(A1)<=10, "上旬", IF(DAY(A1)<=20, "中旬", "下旬"))
DAY(A1) で日付の「日」を取り、10以下なら上旬、11〜20なら中旬、それ以外は下旬と判定しています。
営業報告書や売上分析で「上旬・中旬・下旬の動向」を見たいとき、手動で分類するのは大変です。この数式を入れておけば、日付を入れるだけで自動で振り分けられますよ。
よくあるエラーと対処法
シリアル値(日付形式)で表示されてしまう
DAY関数自体は正しく動いているのに、セルの表示が「2026/3/19」のような日付形式になってしまうケースがあります。
これはセルの書式が「日付」のままになっているだけです。対処はシンプルで、セルを選択して 「表示形式」→「数字」→「数値」 に変更してください。
DAY関数の返り値は1〜31の整数なので、書式を数値にすれば正しく表示されます。
文字列の日付で #VALUE! エラー
DAY関数に文字列を渡すと #VALUE! エラーが出ることがあります。
よくあるのは、他のシステムからコピーした日付がテキストとして貼り付けられているケースです。この場合はDATEVALUE関数(日付形式の文字列を日付値に変換する関数)を使います。
=DAY(DATEVALUE(A1))
A1が文字列の「2026/3/19」でも、DATEVALUEで日付値に変換してからDAYに渡せば正常に動作します。
ちなみに「令和8年3月19日」のような和暦表記は、DATEVALUEでも認識できないことがあります。その場合は、SUBSTITUTE関数で「年月日」を「/」に置き換える前処理が必要です。
数式内で日付を直接書くと意外な結果になる
数式で直接日付を書くときの注意点です。
=DAY(10/10/2000) のように書くと、スプレッドシートは「10÷10÷2000」という 割り算 として計算します。結果は0.0005になり、DAY関数は「0日目=30」(1900年1月0日の前日=1900年1月30日)を返してしまいます。
日付を直接指定するときは、次のどちらかを使いましょう。
=DAY("2026/3/19") ← ダブルクォートで囲む
=DAY(DATE(2026,3,19)) ← DATE関数で日付を組み立てる
#NUM! エラーが出るとき
1899年12月30日より前の日付を指定すると、DAY関数は #NUM! エラーを返すことがあります。
スプレッドシートは1900年以降の日付を前提に設計されているためです。遠い昔の日付を扱うケースは実務ではほぼないですが、誤って過去の日付を入力したときにこのエラーが出る場合があります。
入力されている日付が想定の範囲かどうか、チェックしてみてください。
まとめ:DAY関数はYEAR・MONTHとセットで使いこなそう
DAY関数の要点を振り返りましょう。
- 構文:
=DAY(日付)— 引数ひとつで「日」を取り出す - 返り値: 1〜31の整数(月によって28〜31日まで変動)
- YEAR・MONTHと3点セット で覚えると日付操作が自在になる
- 実務での活用: 締め日集計・固定日の自動生成・残り日数計算・月末判定・上旬下旬振り分け
- エラー対策: 表示形式の確認、文字列はDATEVALUE、日付直書きはダブルクォートかDATE関数
日付を扱う業務では、DAY関数の出番はかなり多いです。YEAR・MONTH・DAYの3つを使いこなして、日付データの集計や管理を効率化してみてください。
日付から「年」を取り出したいときはYEAR関数の使い方、「月」ならMONTH関数の使い方、曜日ならWEEKDAY関数の使い方を参照してください。あわせて覚えると、日付まわりの処理がぐっとスムーズになりますよ。
