(万年)カレンダー

日別月間万年スケジュールは縦型でしたが今回はよくあるカレンダーと同じような曜日の位置が固定されている7日で1行のカレンダーを作成してみます。(図はexcel2013)

schedule日別月間万年スケジュールで使った関数を使いますので一度見ておいてください。

今回は以下のような曜日の場所が固定されているカレンダーを作成してみます。

calendar

日別月間万年スケジュールは朔日(ついたち)の位置はいつも一緒なので月末が何日まであるのかがポイントでした。

今回はいくつかの処理に分かれますので処理ごとに考え方を決めておきます。

calendar_1

  1. ついたちがどこに来るかの処理
  2. 週初めの処理
  3. 月末がどこに来るかの処理
  4. 月末がどこに来るかの処理2

1.ついたちがどこに来るかの処理
月によりついたちの曜日が違うので、どのように1という数値の場所を決めるかです。3行目に曜日が文字列としてありますので、セルA4がついたちだったとして曜日が上の3行目のセルにある曜日と一致するかどうか調べます。曜日が一致していたら『1』と表示して、そうでなければ空白にします。セルA4に入力する数式は

=IF(A3=TEXT(DATE($A$1,$C$1,1),”aaa”),1,””)  セルA4の数式

となります。DATE($A$1,$C$1,1)が2014年5月1日です。TEXT(DATE($A$1,$C$1,1),”aaa”)2014年5月1日の曜日が取得できます。(TEXT関数は曜日の表示を参照してください)

IF関数で曜日同士を比較して、その月のついたちが日曜なら1と表示され、日曜でないなら空白が表示されます。(コピーを考えて絶対参照と相対参照が混在しています。)

次にこの数式をセルG4までオートフィルでコピーすると、その月のついたちには1と表示されますが、2日以降が空白になります。

calendar_5

セル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週の週末までは必ず日が埋まります。

calendar_2

第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に変更するだけです。

calendar_3

ついたちが土曜の31日まである月でもセルC9(第6週の火曜)以降は必ず空白ですから数式を入れる必要はありません。

数式だけまとめると(上の図と同じものを作るとして3行目に曜日を入れておく)

  1. セルA4に
    =IF(A3=TEXT(DATE($A$1,$C$1,1),”aaa”),1,””)
    と入力
  2. セルB4に
    =IF(A4=””,IF(B3=TEXT(DATE($A$1,$C$1,1),”aaa”),1,””),A4+1)
    と入力しセルG4までオートフィルでコピー
  3. セルA5に
    =G4+1
    と入力
  4. セルB5に
    =A5+1
    と入力しセルG5までオートフィルでコピー
  5. セルB5からセルG5までを範囲選択し2行下のセルB7からG7までオートフィルでコピー
  6. セルA8に
    =IF(MONTH(DATE($A$1,$C$1,A$7+7))=$C$1,A$7+7,””)
    と入力しセルG8までオートフィルでコピー
  7. セルA8を選択しセルA9までオートフィルでコピーし数式バーで+7の部分を+14に変更(2か所)。または、
    =IF(MONTH(DATE($A$1,$C$1,A$7+14))=$C$1,A$7+14,””)
    とセルA8に入力しセルB8にオートフィルでコピー

となります。

うまくいったら書式を整てそれらしい見栄えにしてみてください。

また、第5週と第6週はあったりなかったりなので罫線は条件付き書式にしておくと自動で表示されたり消えたりします。第4週までは普通に罫線を設定します。日曜日が空白でなければ週末まで罫線を引くという条件を設定します。

5週目のセルA8からセルG8を選択します。ホームタブのスタイルの条件付き書式をクリックし新しいルールをクリックします。

数式を使用して、書式設定するセルを決定をクリックして=$A8<>””と入力し書式のボタンをクリックし罫線を設定します。(<>は小なりと大なりの記号で等しくないを表します。セルA8が空白でなければという意味)

calendar_4

同様にセルA9からG9にも条件付き書式を設定します。この時の数式は=$A9<>””とA8をA9に変更してください。

ほかにもいくつも作成方法があるようですが、簡単な方だと思います。ご参考にしてください。

 

コメントを残す

メールアドレスが公開されることはありません。