メインコンテンツへスキップ
見出し画像

[EXCEL] 年と月と日を合体させるDATE関数のトラップに注意!!

    ▶ 目次 > 入力 > 日付 関連記事:日付と時間



    関連記事:日付と時間、DATE関数

    【まとめ】

    =DATE(年セル,月セル,日セル)で年月日が出るが、年セル・月セル・日セルのいずれかが空欄だと正しい年月日にならない。
    ・計算式は、想定されていない入力がされることを想定しておく。

    【説明】
    先日、こんな表を作りました。

    画像

    年と月と日を入れると、合体して日付にする表です。
    実際は、生成された日付の右側に項目などが入ります。
    連続する日でもなく、日付は何が入るかわかりません。
    年と月が上と同じなら、上のセルをCTRL+Dで一括コピーして、日だけ変えれば日付が出ます。
    私としては、その方が「2025/5/18」等と年月日全て(とスラッシュを)手入力するより楽なのです(テンキーがないせいもありますが)。
     *「今日」限定なら Ctrl+; が一番です。

    計算式としては、極めてシンプル。

    画像

    B6セルなら =DATE(B6,C6,D6)
    B6の年(2025)をC6の月(5)とD6の日(20)を合体させて年月日にするDATE関数を使っているだけです。
    書式は以下の通り(セルの書式設定 Ctrl+1)。

    画像

    ge/m/d(aaa) としてあります。
    geは年を和暦表示にするもの。
    aaaは曜日です。

    簡単な式なのですが、一つ困ったことが起きました。
    年・月・日の3つのセルが入っていないと、変な日付が出てしまうのです。
    つまり
    年・月・日のうち一つしか入っていなくても、
    年・月・日のうち一つが空欄でも。

    画像

    まぁ、年が空欄だと明治33年(1900年)が表示されてしまう理屈は分かります(エクセルは1900年1月1日を1として扱うので)。

    しかし、年月日の3つが入っていなくても、日付(正しくない)が表示されるのは困りものです。
    「日」しか入っていない場合のように、「#NUM!」が表示されていれば、エラーだとすぐにわかります。

    でも、上のように、正しくない日付であっても、日付が入っていることで、その日付が正しくて有効なものだと受け止めてしまう場合があります(人間もエクセルも)。

    エクセルのトラップです。

    なぜこういうことが起きるか?
    考えてみたところ、空欄=0となるからのようです。
    DATE関数に直接数値を入れてみます。

    画像

    上の罫線で囲まれているところは、年(2025)しか入っていません。
    月・日が空欄です。
    この空欄を、DATE関数が「0」とみなして、下の式に入れています。
    結果は・・・

    画像

    同じです。

    理由は分かりましたが、これ、ちょっと問題です。
    通常、計算式の中に数値を直接入れることはしません(入れてはいけない。変えづらい&ミスの元になるから)。
    計算式にはセルを記述しますが、そのセルが空欄だと正しい日付になりません。
    でも、日付としては表示されてしまう。
    すると、ミスに気づかない・・・。

    困ります。

    対処方法は、とりあえず2つ。

    1 空欄であることを表示する。
    「条件付き書式」で空欄を黄色にして、空欄であることを注意喚起する。

    画像

    結果、空欄は黄色くなります。

    画像

    これで、入力漏れはある程度防げます(でも、あり起こりえます)。

    空欄を黄色にする方法詳細は以下をどうぞ。
    [EXCEL]ファイルを引き継いだらやること ⑦入力すべき欄が空欄になっていたら目立たせる

    2 年・月・日のいずれかが空欄なら「日付不備」と表示する(又は何も表示しない)

    画像

    =IF(OR(B11="",C11="",D11=""),"日付不備",DATE(B11,C11,D11))

    上の式は、「B11が空欄」か「C11が空欄」か「D11が空欄」のいずれか(or)である場合は、「日付不備」を表示し、それ以外(B11,C11,D11の全てが空欄でない=入力されている)なら、DATE関数で日付にする、という意味です。


    「日付不備」はうるさいと感じるなら、単に空欄でもいいでしょう。

    画像

    =IF(OR(B11="",C11="",D11=""),"",DATE(B11,C11,D11))

    こうすれば日付が表示されないので、おかしいと気づきますし、間違って集計(日別とか月別と曜日別とか)されることもありません。


    これ、両方やると面倒だけれど、大事なファイルなら、やっておいた方が無難です。
    一行に設定してコピーすれば済みますから。
    (私なら、入力の度に一つ上のセルを全部一度にCtrl+Dでコピーして、修正しながら入力していきます。)

    おまけ
    年・月・日が空欄でなくても、正しい数値が入るとは限りません。

    例えば・・・

    画像

    月に13,日に34というあり得ない数字が入っています。
    でも計算されてしまっています。

    細かく検証していませんが、これ、本来の月や日の数字を超えた部分も含んで日付にしてしまっているのでしょう。

    この手の入力ミスを防ぐのはちょっと面倒。
    月なら13以上はエラー表示する方法もありますし、プルダウンリストにしてしまう(リストの数値以外エラーにする)こともできます。
    日の場合は、月により日数が違うので面倒。
    31までしか入れられないようにするのがせいぜいできるところでしょうか(月と連動するプルダウンリストという手もあるでしょう)。


    対処法はともかく、想定とは違った数値が入ることを想定しておく、ということです(難しい話ですが)。


    「こうすれば計算できる」という例はWEBでもエクセル本でも多々載っている一方、「こうすなると正しく計算できないので注意」という例は、ほぼ載っていません(マニアックなWEBなら載せていそうだけど)。

    なので、計算式を入れ、他の人にデータを入れてもらう際は、「思った通りに数値(やデータ)を入れてくれなかった場合」の検証を行うとともに(エラー表示になるのか、一見有効な内容が出るのか等)、思った通りには入れてくれない場合を想定した対策(エラー表示や注意喚起)を考えおいた方がいいでしょう。


    今回の例位なら、見逃すことは少ないかと思いますが、細かいデータの中にポロリとミスがあると見逃しやすいものです。
    そのミスが元で、謝罪会見を行う羽目になる場合もありますので、くれぐれもご注意を。


    以上、参考になれば幸いです。
    ささやかでも何か発見や気づきになることがありましたら、スキやフォローしていただけると嬉しいです。


    (作業 1日1:30)








































    あなたへのおすすめ