(万年)カレンダー
マイクロソフトエクセル
2014-05-29 11:06:04
日別月間万年スケジュールは縦型でしたが今回はよくあるカレンダーと同じような曜日の位置が固定されている7日で1行のカレンダーを作成してみます。(図はexcel2013)
日別月間万年スケジュールで使った関数を使いますので一度見ておいてください。
今回は以下のような曜日の場所が固定されているカレンダーを作成してみます。
日別月間万年スケジュールは朔日(ついたち)の位置はいつも一緒なので月末が何日まであるのかがポイントでした。
今回はいくつかの処理に分かれますので処理ごとに考え方を決めておきます。
- ついたちがどこに来るかの処理
- 週初めの処理
- 月末がどこに来るかの処理
- 月末がどこに来るかの処理2
セルB4には隣のセルA4が空白かどうかIF関数で、比較して空白であればついたちであるかどうかの処理をします。すでに数値1があれば翌日分として1加算します。
=IF(A4="",IF(B3=TEXT(DATE($A$1,$C$1,1),"aaa"),1,""),A4+1) セルB4からG4の数式
これをセルG4までオートフィルでコピーします。(相対参照は参照セルが変わります。)
この時に、年月日が表示されてしまったら表示形式を標準にしてください。
2.週初めの処理
これは単純です。B列以降は隣のセルに1を足したものでいいのですが週初めは前週の最後(土曜)の数値に1を足したものにします。セルA5は前週末セルG4プラス1です。
=G4+1 セルA5の数式
=A5+1 セルB5からG5までの数式
6行目7行目の第3週、第4週は第2週の式をそのままフィルハンドルでコピーしてください。
3.月末がどこに来るかの処理
どんな月でも第4週の週末までは必ず日が埋まります。
第5週と第6週はある月とない月があります。あるか無いかは前週の同じ曜日に7を足して同じ月かどうかで判別します。month(日付)で月が取得できますのでセルC1の値と比較して同じだったら前週に7足した数値を表示、来月だったら空白の数式を入力します。DATE($A$1,$C$1,A7+7)で前週の同じ曜日に7を足した日。MONTH(DATE($A$1,$C$1,A7+7))でその日が何月か。これをセルC1と同じかどうか比較して、真なら前週の同一曜日(1行上のセル)に7を足したものを表示し、偽なら空白を表示します。結局、セルA8に入力する数式は
=IF(MONTH(DATE($A$1,$C$1,A$7+7))=$C$1,A$7+7,"") セルA8からG8の数式
セルA8の数式をフィルハンドルでセルG8までコピーします。
4.月末がどこに来るかの処理2
は先ほど数式を縦にコピーしたいのですが、すでに前週が空白の場合があるのでエラーが表示されてしまう可能性があります。ここは前々週(これは第4週なので必ず存在します。)プラス14にすることでエラーが防げます。
=IF(MONTH(DATE($A$1,$C$1,A$7+14))=$C$1,A$7+14,"") セルA9からセルB9の数式
+7を+14に変更するだけです。
ついたちが土曜の31日まである月でもセルC9(第6週の火曜)以降は必ず空白ですから数式を入れる必要はありません。
数式だけまとめると(上の図と同じものを作るとして3行目に曜日を入れておく)
- セルA4に =IF(A3=TEXT(DATE($A$1,$C$1,1),"aaa"),1,"") と入力
- セルB4に =IF(A4="",IF(B3=TEXT(DATE($A$1,$C$1,1),"aaa"),1,""),A4+1) と入力しセルG4までオートフィルでコピー
- セルA5に =G4+1 と入力
- セルB5に =A5+1 と入力しセルG5までオートフィルでコピー
- セルB5からセルG5までを範囲選択し2行下のセルB7からG7までオートフィルでコピー
- セルA8に =IF(MONTH(DATE($A$1,$C$1,A$7+7))=$C$1,A$7+7,"") と入力しセルG8までオートフィルでコピー
- セルA8を選択しセルA9までオートフィルでコピーし数式バーで+7の部分を+14に変更(2か所)。または、 =IF(MONTH(DATE($A$1,$C$1,A$7+14))=$C$1,A$7+14,"") とセルA8に入力しセルB8にオートフィルでコピー
同様にセルA9からG9にも条件付き書式を設定します。この時の数式は=$A9<>""とA8をA9に変更してください。
ほかにもいくつも作成方法があるようですが、簡単な方だと思います。ご参考にしてください。
