もう悩まない!エクセルif関数での日付比較方法まとめ
業務を行っていると、ある日付とある日付のどちらが過去の日付か(あるいは未来の日付か)を判定したい場合があります。
エクセルでは、日付データについては、「過去の日付」のほうが「小さい数値」として取り扱われます。
そのため、日付同士を「不等号」で比較することで過去日付(未来日付)かどうかの判定ができます。
ところが、「日付」の入力方法が結構ややこしいので、if関数で日付の比較をしようとしても、なかなかうまく比較できないケースが多いのです。
そこで、このページでは、エクセルのif関数で日付を比較する際の入力方法をまとめました。
この記事の目次
日付を比較する方法まとめ
比較したい日付がセルに入力されている場合
標準書式(あるいは日付書式)に設定している状態で、通常通り日付の入力をすればOKです。
例えば、比較したい2つの日付が、両方ともセルに入力済の場合、if関数で、その2つのセルを参照する計算式を入力すれば日付の比較ができます。
比較したい日付を計算式で指定したい場合
例えば、A1セルに入っている日付と「2016/6/1」とを比較したいという場合。
次のように、単に、計算式の中で日付を指定しただけでは正しい比較はできません。
そうではなく、次のようにdate関数を使って日付を指定します。
実際にエクセルで入力すると、次のようになります。
日付の入力方法まとめ
まとめると、日付を比較する場合には、次のように入力すればOKということです。
- セルに入力されている日付
-
(セルの書式を通常あるいは日付にしたうえで)通常通り入力する
- 計算式で直接指定する日付
-
date関数を使って日付を指定する
エクセルでの日付の管理方法
さて、なぜ、上で説明したように入力しないといけないのか?
その理由を考えてみたいと思います。
エクセルでは、セルに日付を入力した場合、自動的に対応する数値に置き換えられて記録されています。
例えば、
日付 | シリアル値 | |
---|---|---|
2016年2月28日 | → | 42428 |
2016年2月29日 | → | 42429 |
2016年3月1日 | → | 42430 |
2016年3月2日 | → | 42431 |
... |
という感じです。
イメージとしては、直線上に日付を1列に並べたものを思い浮かべてもらえるとわかりやすいのではないかと思います。
この対応する数値は「シリアル値」と呼ばれています。
例えば、次のようにA1セルに「2016/2/29」と入力した場合。
エクセル内部では、自動的に「42429」という数値に変換されて記録されています。
→詳細解説はこちらからどうぞエクセルのシリアル値とは?
エクセルは日付の比較はどうしているか?
日付の比較をするときには、エクセル内部では、先ほど書いた「シリアル値」の大小比較をしています。
「シリアル値」は単なる数値ですから何も考えずに大小比較ができます。
この例であれば、シリアル値で比較すれば「42491<42522」です。
ですからif関数の条件式「A1セル<B1セル」は成り立っているものとして取り扱われ「A1セルが過去」と表示されるわけです。
計算式中に単に日付を入力してはダメな理由
それでは、なぜ、エクセルの計算式中に単に日付を入力したらダメなのでしょうか?
実は、計算式中で、単に「2016/6/1」と入力してしまうと、エクセルは「2016÷6÷1」という「割り算の計算式」だと認識してしまうのです。
条件式を見てみると、
- A1セルのシリアル値は「42491」。
- 「2016÷6÷1」=「336」。
結局「A1セル(=42491)≧336(=2016÷6÷1)」と判定されてしまい、本来欲しい結果と逆の結果になってしまうのです。
計算式中では、直接「シリアル値」を入れてはいけない
セルに入力する場合と違って、計算式中では自動的に「シリアル値」に変換してくれるような便利機能はありません。
ですから、関数や計算式を駆使して自力で「シリアル値」を作り出さないといけないのです。
その方法の1つが冒頭で紹介した「date関数」を使う方法です。
次のような形式でdate関数を使うと、指定した年月日に対応する「シリアル値」が得られます。
このようにして、シリアル値を作り出したうえで、日付の比較をすることで、正しい比較ができるのです。