Excel日付の罠と正しい使い分け:「d」vs「yyyy年m月」

PC・ガジェット

📌 TL;DR:3つの結論

“d”は見た目を1〜31にするだけ。集計・検索のキーにしてはいけません。

“yyyy年m月”は月のラベルとして最強だが、TEXT関数で文字列化すると計算に使いづらくなります。

正解は「値は日付のまま・表示で整える」という一点に尽きます。

Excelの日付は内部的に数値:シリアル値の正体

Excelの日付は実は「日数の通し番号」です。例えば2025年10月10日は、1900年1月1日からの通算日数として内部保存されています。表示形式はこの数値の見せ方を変えるだけで、値そのものは変わりません。だからこそ「計算に使う列」は日付型のまま保持し、「見せる列」は表示形式で整えるのが鉄則なのです。

“d”の罠:1〜31に見えるだけの落とし穴

“d”はその月の「日」だけを表示します。10月1日も11月1日も、画面には”1″と表示されます。

⚠️ この仕様が生み出す問題は深刻です:

  • フィルターやソートで月をまたぐと意味不明になる
  • その”1″”2″をJOIN相手のキーにすると月を誤マッチ
  • CSVに吐き出す時、表示は”1″でも値はフル日付なので混乱が生じる

“d”を使うべき場面

“d”を使うべき場面は限定的です。月間カレンダーの「日付セルの見た目」だけを整えたいとき、または印刷・UI目的で日だけを表示したいときです。ただし、そうした場合でも計算・検索・集計は必ず元のフル日付列を参照すること。これが原則です。

“yyyy年m月”の落とし穴:作り方で致命的に変わる

“yyyy年m月”は月次ラベルとして非常に見やすい一方、作り方によって使えるかどうかが決まります。

✅ OKな作り方(推奨)

ステップ1:B列に月初日を作る

=DATE(YEAR(A2),MONTH(A2),1)

ステップ2:B列の表示形式をユーザー定義で yyyy"年"m"月" に設定

結果:値は日付型のまま、見た目だけが”2025年10月”になります。ピボット、グループ化、並び替え、期間比較がすべて正しく動作します。

❌ NGな作り方(非推奨)

不正な例:

=TEXT(A2,”yyyy年m月”)

問題点:値が文字列になるため、ソート順がおかしくなり、日付関数が使えず、月次の範囲比較が壊れます。ラベル表示用に別列で作るのはOKですが、キーや集計に絶対に使わないでください

実務フロー:3ステップで月次も日次も迷わない

前提として、A列に取引日などのフル日付があるとします。

ステップ1:月キー列(B列)を作る

=DATE(YEAR(A2),MONTH(A2),1)

値をその月の1日にし、B列の表示形式を yyyy"年"m"月" に設定します。ピボットやSUMIFSのキーは必ずこのB列を使います。

ステップ2:日ラベル列(C列)を作る(必要に応じて)

C列はA列の表示形式を”d”にするか、以下の数式で1〜31の整数として作ります。

=DAY(A2)

見た目を日だけにしつつ、集計はA/B列の日付型を使う仕組みです。

ステップ3:表示と計算を完全に分離する

見出しやレポートの見栄えは表示形式で作り、関数・比較・結合は日付型の列で行います。ラベルが必要なら別列にTEXTで作成し、用途を明確に分ける──これが安定性の秘訣です。

よく使う表示形式早見表

形式コード 表示例 用途・注意点
d 1〜31 先頭ゼロなし。見た目専用。
dd 01〜31 先頭ゼロあり。印刷向け。
m / mm 1〜12 / 01〜12 月。時刻コード混在時は「分」になるため注意。
mmm / mmmm 1月 / 10月 月名。日本語環境に対応。
yyyy 2025 西暦4桁。
yyyy"年"m"月" 2025年10月 推奨月ラベル形式。値は日付のまま。

⚠️ 重要な注意点:“m”は日付コードなら月、時刻コード(h, s)と一緒なら分として解釈されることがあります。混在表記は避け、年月文字を入れて明示すると安全です。

ピボットとグラフでのベストプラクティス

  • ピボットの列・行ラベルには月初日(B列)を使う
  • グループ化(Months, Years)は日付型でのみ正しく動作
  • グラフの軸に「2025年10月」など順序通りの月表示を出す場合も、値は月初日+表示形式で構築するのが確実

やってはいけないチェックリスト

  • TEXT(A:A,"yyyy年m月") をキー列としてJOINや比較に使用
  • ❌ “d”表示の列をVLOOKUP/XLOOKUPの検索キーに使用
  • ❌ 日付列に日付と文字列が混在させる
  • ❌ “m”を時刻と混在させて月と分が入れ替わる表示事故を起こす
  • ❌ 月次集計のキーをTEXT関数で作る
  • ❌ 月初日を作らずにフル日付でピボット集計する

まとめ:「値は日付、見た目は表示形式」

“d”は見せ方専用、”yyyy年m月”は表示形式で作るのが正解です。計算ロジックは常に日付型の列を参照し、ラベルは別列に分離して、表示と計算を二刀流で運用してください

この運用を徹底すれば、ピボット・グラフ・自動化(Office Scripts/VBA)まで一気に安定し、来月からの月次表作成や集計の手戻りがほぼゼロになります。あなたのシート構成に合わせて、この記事のテンプレを応用してみてください。

コメント

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