エクセルでカレンダーを作ってみる(3)

| コメント(0) | トラックバック(0)

カレンダーの月末処理

あまり複雑なことはできませんが、2月や30日までの月は31日(29、30日)を表示しないくらいなら比較的簡単にできます。基本はカレンダーの定義をエクセルに反映させること。ただ、これだけです。やり方はいろいろあると思いますが、一例を紹介しますね♪

  • 1、3、5、7、8、10、12月は31日
  • 4、6、9、11月は30日
  • 年数が4の倍数の年をうるう年とする。ただし、100の倍数の年で400の倍数でない年は平年とする

この定義をまとめてみましょう。

  1. 1、3、5、7、8、10、12月は31日まである
  2. 2月以外は30日がある
  3. カレンダーはエクセルがシリアル値で管理しているので閏年の管理はいつ3月1日になるかで判定すればいい

考え方の一例なんですけど、いかがでしょう???もっといい定義があれば、もちろん、それにそって関数を組み立てて下さいね♪

さて、話は戻ります。

(1)の31日の件は、31日を表示するかどうかを判定するので「31日」に、(2)の件は30日を表示するかどうかを判定するので「30日」に、(3)は29日を表示するかどうかを判定するので「29日」に、関数を入れていきます。

では、具体的に。

とりあえず、31日のセルを選択します。先ほどコピーした関数はいったん忘れて、31日を表示するかしないかの関数に置き換えます。

31日まであるのは、1、3、5、7、8、10、12月なので、セルA2(月度設定セル)に、該当月が入力されているかどうかチェックします。チェックは IF 関数を使って判定します。「もし××ならば」の××部分に31日まである月を OR 関数を使って定義します。IF関数ですので、正しければ、セルA34(30日のセル)+1、正しくなければブランクとします。

=IF(OR(A2=1,A2=3,A2=5,A2=7,A2=8,A2=10,A2=12),A34+1,"")

これで、2、4、6、9、11月は31日がブランクになるはずです。

30日については2月以外は30日を表示すべきとわかっているので、IF 関数で、セルA2が2月ならブランク、そうでなければセルA33(29日)+1 とします。

=IF(A2=2,"",A33+1)

29日については、閏年の定義はさておき、エクセルがカレンダーを持っているのでなんの心配もいりません。セルA32(2月28日)に1を足して2月29日になれば29日を表示、セルA32に1を足して3月1日になればブランクとなります。29日があるのかないのかは、2月なのか3月なのかを調べればいいので、月度を取り出して比較します。セルA32(2月28日)+1 が A2(月度設定セル=2月)であるかどうかです。月度を取り出すには、MONTH関数を使います。(日付を取り出して29日かどうかを調べてもOKです♪)

=IF(MONTH(A32+1)=A2,A32+1,"")

これで、29~31日の設定ができました。2月などいろいろ変えて試してみて下さい。

最後に曜日の関数を変更します。これは単純に、日にちセルに日にちが表示されていれば曜日を表示、そうでなければブランク・・・と、IF 関数を使って設定します。29日の場合はセルB33に。

=IF(A33="","",WEEKDAY(A33))

このセルをコピーして30日と31日に貼り付ければおしまいです。

とりあえずこれで、西暦と月度を入力すると、曜日が自動変更され、月末の29~31日の処理も行えるようになりました。これだけでは物足りないとは思いますが、今日はこの辺で。

お疲れ様でした。

※もっと簡単に定義したい方へ
エクセルは万年カレンダーを持っています。1月31日に1を足せば必ず2月1日になります。閏年だろうと、間違えずに計算します。と言うことは、前日と当日の月を比べて違っていれば空欄にし、2月の場合、前日セルが空欄ならエラーになるので、その回避処理も追加しておけばOKです。月を取得するにはmonth関数、前日セルが空欄かどうかは、if関数で「=""」ならば、とするのが無難でしょう。

次回は、土曜日と日曜日の色替えです♪

トラックバック(0)

トラックバックURL: http://pc.z-kikaku.jp/mt/mt-tb.cgi/494

コメントする

このブログ記事について

このページは、杜夜 泉が2008年10月16日 22:42に書いたブログ記事です。

ひとつ前のブログ記事は「エクセルでカレンダーを作ってみる(2)」です。

次のブログ記事は「エクセルでカレンダーを作ってみる(4)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.04