スプレッドシートのDAY関数の使い方|日付から「日」を取り出す3つのパターン

スポンサーリンク

スプレッドシートで日付を扱っていると、「日」だけを取り出したくなる場面、意外と多いですよね。たとえば営業日報で「毎月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関数の使い方を参照してください。あわせて覚えると、日付まわりの処理がぐっとスムーズになりますよ。

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