日付のうち「年」「月」が特定できれば、その月の末日を求めることができます。
| A | B | C |
1 | 年 | 月 | 日 |
2 | 2003 | 4 | =DAY(DATE(A2,B2+1,0)) |
求めたい日付の「年」「月」までがわかっているので、これが利用できます。
「年」「月」「日」の値を元にシリアル値を求める関数として
DATE関数があります。
上記の数式では「2003年5月0日」を求めている形ですが、
「2003年5月0日」、すなわち、「2003年5月1日の一日前」=「2003年4月の最終日」となります。
この点、DATE関数は非常に柔軟です。
例えば「12月の最終日」の場合でも、B2の値が「12」の場合はDATE関数は
「2003年13月0日」のシリアル値を求める計算になりますが、
もちろんこれはありえない日付なので自動的に「2004年1月0日」へと読み替え、
これもありえない日付なので「2003年12月31日」へと読み替えられます。
次の表はA2、B2に年と月を入力するようになっています。
A4:A34の範囲にA2、B2の値に基づいた日付を自動的に増減させることを意図します。
| A | B | C |
1 | 年 | 月 | |
2 | 2003 | 4 | |
3 | 日 | | |
4 | 1 | | |
5 | 2 | | |
・ ・ ・ |
29 | 26 | | |
30 | 27 | | |
31 | 28 | | |
32 | 29 | | |
33 | 30 | | |
34 | 31 | | |
いろいろなやり方があると思います。
まず、28日間より少ない月はありません。
ですから、A31(28日)までは定数の数値として入力しておいても差し支えありません。
29日から31日の日付にあたる部分、つまりA32:A34の範囲が毎月可変となる部分です。
一例として次のような数式を該当のセルへ入力する方法があります。
| A | B | C |
1 | 年 | 月 | |
2 | 2003 | 4 | |
3 | 日 | | |
4 | =IF(MONTH(DATE($A$2,$B$2,ROW(A1)))=$B$2,ROW(A1),"") | A4の数式をA34までコピー | |
5 | 2 | | |
・ ・ ・ |
29 | 26 | | |
30 | 27 | | |
31 | 28 | | |
32 | 29 | | |
33 | 30 | | |
34 | 31 | | |