「エクセル if 日付 ヵ月後」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
ある日付がnか月後以降かどうかを、IF関数を使って判定する数式の立て方を調べている方による検索でしょうか。
この件に限らず、まずは自分で理解できるレベルに課題を分解しましょう。
nか月後以降かどうかを判定して何らかの結果を表示するためには、
- nか月後の日付を求める数式
- 日付を判定して結果を表示するIF関数を使った数式
という2つの数式を、それぞれ作ることができなければなりません。
この2つをいきなり1つの式にしようとすると、ハードルが上がりますから、順番に解決しましょう。
nか月後の日付を作業セルに計算して判定する数式
まず、いずれかのセルにnか月後の日付を求める数式を入力し、次に、そのセルの値と比較したい日付から判定結果を表示するIF関数を使った数式を作りましょう。「=EDATE(TODAY(), 2)」
という数式を入力
↓
C1セルに
「=IF(A1>=B1, "2か月後以降", "2か月後より前")」
という数式を入力
C1セルに入力した数式は、日付は未来になるほど大きい数値だということと、IF関数が理解できていれば簡単でしょう。
B1セルに入力したEDATE関数は、指定された日付の、nか月後の日付を計算する関数です。基準日を第1引数に、nか月後を第2引数に指定します。
「=EDATE(TODAY(), 2)」は、
基準日が「2014年12月27日」の場合「2015年2月27日」を
基準日が「2014年12月28日」の場合「2015年2月28日」を
基準日が「2014年12月29日」の場合も「2015年2月28日」を
返してきます。
月末の日付をどう扱うのかによって、B1セルに入力する数式は異なってきます。
例えば、2014年の12月29日に、2015年2月28日を、2か月後であると判定したいのならば、上記のとおり
「=EDATE(TODAY(), 2)」
ですが、2014年の12月29日に、2015年2月28日を、2か月後ではないと判定するならば、DATE・YEAR・MONTH・DAY関数を使って、
「=DATE(YEAR(TODAY()), MONTH(TODAY())+2, DAY(TODAY()))」
としてください。
2014年12月29日に
「=EDATE(TODAY(), 2)」は
「2015年2月28日」を返しましたが、
「=DATE(YEAR(TODAY()), MONTH(TODAY())+2, DAY(TODAY()))」は
「2015年3月1日」を返してきます。
これによってC1セルに入力した
「=IF(A1>=B1, "2か月後以降", "2か月後より前")」
という数式の結果も変わってくるわけです。
nか月後かどうかを判定する数式
上記の数式を一つにまとめると以下のようになります。という数式を入力する
先の作業セルを使った数式を一つにまとめたのが
「=IF(A1 >= EDATE(TODAY(),2), "2か月後以降", "2か月後より前")」
です。
先のマクロで、
B1セルに入力した「EDATE(TODAY(), 2)」を
C1セルに入力した「IF(A1>=B1, "2か月後以降", "2か月後より前")」
のIF関数の第1引数の「B1」の部分に入れたのが
「IF(A1 >= EDATE(TODAY(),2), "2か月後以降", "2か月後より前")」
です。
2014年の12月29日に、2015年2月28日を、2か月後ではないと判定するならば、
「DATE(YEAR(TODAY()), MONTH(TODAY())+2, DAY(TODAY()))」を
「IF(A1>=B1, "2か月後以降", "2か月後より前")」
のIF関数の第1引数の「B1」の部分に入れて
「=IF(A1 >= DATE(YEAR(TODAY()), MONTH(TODAY())+2, DAY(TODAY())), "2か月後以降", "2か月後より前")」
としてください。
- Newer:選択範囲の文字列をWord VBAで取得する
- Older:VBAを使う上で雲泥の差が出てきそう
Home » Excel(エクセル)の関数・数式の使い方 » 論理・情報 » IF関数で日付がnか月後かどうかを判定する