今日の日付と比較して過ぎていれば自動で色を変えるという場合、TODAY関数と条件付き書式を使えば良いです。今日の日付を過ぎている、近づいていることの判定ができれば、それを条件付き書式の数式に入力すればよいのです。また、1日単位、1週間単位で条件を設定する場合も、日付の足し算または引き算で良いです(参考:【Excel】日付の比較、期間の経過と期限が近付いていることの判定、色を自動で変える設定)。
しかし、「1か月前に近づいている」「1年を経過している」など、月単位の判定の場合、EDATE関数が必要となります。この場合も、「大小比較」「IF関数」「条件付き書式の設定」の3つに分けて練習しなければなりません。
そこで、今回は、EDATE関数を用いて、月単位または年単位で期限を設定して、その期限が経過又は近づいていることを自動で判定し、色を変えるまでの流れについて出題します。
目次
1.日付のシリアル値の大小比較(復習)
問題
セルB1に入力した日付を基準として、セルA3以降の日付が基準日を超えていればTRUE、基準日までの日付であればFALSEと表示しなさい。
解説
日付をシリアル値として入力した場合、セルに保存されている値は単なる整数値です(参考:【Excel】日付の「シリアル値」を本気で理解するには何を練習するべきか?)。したがって、大小の比較演算は日付のシリアル値でもすることができます。
基準日を絶対参照にしてそれよりも大きい場合は、基準日を超えていることになります。
- =A3>$B$1
別解
基準日の翌日と比較して、「=A3>=$B$1+1」としても良いです(時刻のシリアル値を考慮した場合、本当はこちらの式のほうが望ましい。以下、省略)。
2.EDATE関数を用いた大小比較
(1)Nか月以内の判定
問題
セルB1に入力した日付を基準として、セルA3以降の日付が3か月以内であればTRUE、3か月後を超えた日付であればFALSEと表示しなさい。ただし、基準日の3か月後の応当日が無い場合はその月の末日とする。
解説
基準日が10月30日の場合、その3か月後にあたる日は翌年1月30日です。3か月後を求める関数はEDATE関数です(参考:【Excel日付】月単位や年単位の加算、EDATE関数の使い方基本編)。3か月後にあたる日以下であればTRUEになります。
- =A3<=EDATE($B$1,3)
ただし、11月30日の3か月後(2月30日)のように応当する日が存在しない場合、EDATE関数は強制的にその月の月末の日を返します(2月28日または29日)。
(2)Nか月経過の判定
問題
セルB1に入力した日付を基準として、セルA3以降の日付から3か月経過していればTRUE、3か月経過していなければFALSEと表示しなさい。ただし、基準日の3か月前の応当日が無い場合はその月の末日とする。
解説
基準日が10月30日の場合、その3か月前にあたる日は7月30日です。3か月前を求める関数もEDATE関数です。3か月前にあたる日以上であればTRUEになります。
- =A3>=EDATE($B$1,3)
(3)補足:期限到来を正確に判定する
ある期間を設定した場合、その終了日は、開始日の応当日の前日です。例えば、10月30日から3か月間という場合の終了日は、翌年1月30日ではなく1月29日(の24時)です。ただし、応当日が無い場合は月末となります。正式な終了日の計算方法は「EDATE-応当日判定式」となります。詳しくはこちらの記事をご覧ください。
3.本日を基準とする判定
(1)1年先の日付の判定
問題
本日を基準として、A列の日付が1年以内であればTRUE、本日の1年より先の日付であればFALSEと表示しなさい。ただし、本日が2月29日の場合は翌年の2月28日(月末日)とする。
解説
本日を基準とする場合、TODAY関数が起算日となります。
- =A1>EDATE(TODAY(),12)
(2)今年度の判定
問題
本日を基準として、A列の日付が今年度の日付であればTRUE、そうでなければFALSEと表示しなさい。ただし、年度は4月から翌年3月までとする。
解説
年度には学校年度や会計年度などがあり、4月から始まる場合もあれば、他の月から始まる場合もあります(参考:【Excel関数】西暦年度、和暦年度、年度開始日と年度末の日を表示する)。4月から始まる年度の場合は3か月前にずらして考えます。3か月前の西暦年を求めます。
- =YEAR(EDATE(A1,-3))
今年度の西暦年と比較して判定します。
- =YEAR(EDATE(A1,-3))=YEAR(EDATE(TODAY(),-3))
4.IF関数で判定結果を表示する
(1)1年経過の判定
問題
A列の日付をそれぞれ基準として、現時点ですでに1年を超えていれば「期限切れ」、1年経過していなければ空白にしなさい。ただし、本日の1年前の応当日が無い場合はその月の末日とする。
解説
A列の日付から見て1年を超えているかどうかの判定をします。
- =EDATE(A1,12)<TODAY()
日付の大小比較ができれば、IF関数でTRUE/FALSEを別の文字列に置き換えることができます。
- =IF(EDATE(A1,12)<TODAY(),"期限切れ","")
(2)IF関数の入れ子
問題
さらに、現時点で11か月経過していれば「更新が必要」と表示しなさい。
解説
IF関数を入れ子にします。12か月経過を先に判定し、その中で11か月経過の判定をします。
- =IF(EDATE(A1,12)<TODAY(),"期限切れ",IF(EDATE(A1,11)<TODAY(),"更新が必要",""))
このとき、11か月と12か月の判定を逆にしてはいけません。
基準日から12か月が経過している日付は、もちろん11か月も経過しています(11か月経過の日付に含まれる)。11か月経過と12か月経過では、12か月経過のほうが範囲が狭いのです。IF関数を入れ子にするときは、条件が狭いほうを先に判定しなければなりません。
5.VLOOKUP関数による判定
問題
VLOOKUP関数を用いて、さきほどの問題と同様、11か月を経過していれば「更新が必要」、12か月を経過していれば「期限切れ」と表示しなさい。
解説
条件が多くなるとIF関数の入れ子が多くなり、数式が長くなります。その場合は、判定表を別に作るという方法もあります。本日の日付を基準として、12か月より前なら「期限切れ」、12~11か月前の間であれば「更新が必要」とします。
- =EDATE(TODAY(),-12)
- =EDATE(TODAY(),-11)
VLOOKUP関数で検索します。
- =VLOOKUP(A1,$E$1:$F$3,2,1)
6.条件付き書式で色を付ける
(1)期限が近付いていれば塗りつぶす
問題
本日を基準として、A列の日付が本日から1か月以内であれば、青色系で塗りつぶしなさい。
解説
日付の大小比較が理解できていれば、それを用いて条件付き書式を設定することも可能です。A列の日付を選択して、条件付き書式の新しいルールで設定します。
「数式を使用して、書式を設定するセルを決定」を選択し、条件式を入力します。
- =A1<=EDATE(TODAY(),1)
塗りつぶしの書式を設定します。
これで1か月以内の日付の色が変わりました。
(2)経過していれば塗りつぶす
問題
A列の日付をそれぞれ基準として、現時点ですでに1年を超えて経過していれば赤色系で塗りつぶしなさい。
解説
A列の日付を選択して、条件付き書式の新しいルールで設定します。
「数式を使用して、書式を設定するセルを決定」を選択し、条件式を入力します。
- =EDATE(A1,12)<TODAY()
これで1年を経過している日付の色が変わりました。
(3)条件の順序に注意せよ!!
問題
さきほどの問題でさらに、現時点ですでに3年を超えて経過していれば緑色系で塗りつぶそうとしたところ、まったく色が変わらなかった。その原因を述べたうえで修正しなさい。
解説
さきほどと同じ手順で、新しいルールで3年前の日付に色を塗ろうとしています。
- =EDATE(A1,36)<TODAY()
3年以上前(3年以上経過)の日付の色が変わりました。
ここで、A列の日付を選択して、条件付き書式のルールの管理で確認します。
3年前の日付を塗りつぶす設定が優先となっています。
この順序を逆にして適用します。順序を逆にすると3年前の日付を塗りつぶす設定が適用されません。
3年以上前の日付は、1年以上前の日付の条件に含まれるため、2番目の条件として設定しても意味がありません。このように条件付き書式で条件を複数設定する場合は条件の順序に注意する必要があります。
解説は以上です。