ちょっとしたスケジュール管理用などとして、紙ベースの日程表作成が必要になる場合がある。Excelを利用すれば作成可能だが、日付や曜日を手作業で入力するのは面倒である。そこで、規定のフォーマットに該当する年と月を入力するだけで、任意の1カ月分のカレンダーが自動的に作成されるシートを設計してみる。ここで紹介する日付関数のWeekdayやDateと条件付き書式の使い方をマスターすれば、用途に応じて自由なフォーマットにカスタマイズできる。
対象ソフトウェア:Excel 2000/Excel 2002
ちょっとしたスケジュール表やプロジェクトの管理表などを作成する際に、OutlookやProject(プロジェクト管理ソフトウェア)、そのほか専用のソフトウェアではなく、Excelで簡単に日程表を作成する、という機会は意外と少なくない。
そんなとき、定型的であるにもかかわらず、外枠であるカレンダー部分を作成するのは、実は意外と面倒臭い作業でもある。
そこで本稿では、任意の年月を設定しさえすれば、カレンダーのフォーマットを自動的に作成してくれるExcelテンプレートを作成してみよう。紙に印刷して使用するもよし、メモ欄を設けるなどして電子データ上で使用するもよし、用途に応じて業務、日常生活に役立ててほしい。
まずはExcelを起動して、カレンダーのテンプレートを作成してみよう。
曜日に対応した数値を「1〜7」の値で6行目にセットしてあるほかは、あまり特筆すべき点はない。上記のリンクから今回ご紹介するExcelシートのデータをダウンロードするか、ないしはご自分でデザインしたカレンダーのテンプレートを作成してみてほしい。
なお、6行目の数値は、あくまで後述の判定式で使用するだけで、ユーザーには関係のない情報であるので、行ごと非表示にしておくとよいだろう(左端にあるボタンをクリックして行全体を選択し、右クリックで表示されるショートカット・メニューの[非表示]を実行する)。
今回作成するカレンダー・フォーマットは、大きく1行目と2行目以降とで、埋め込まれる数式が異なる。まず1行目の関数を見てみよう。以下は、セルB7にセットされた関数式である(以下のリストでは、式が見やすいよう改行してあるが、実際には1行である)。
= IF(B$6>=WEEKDAY(DATE($B$2,$B$3,1)),
B$6-WEEKDAY(DATE($B$2,$B$3,1))+1,"" )
DATE関数は、パラメータとして指定された年月日を表わすシリアル値を返す関数である。例えば、「DATE($B2,$B$3,1)」なら、ヘッダ部で指定された年月の月初の日(ついたち)を表わす($B2と$B$3はそれぞれ、前挙の画面の(1)と(2)に対応する)。こうして得られた値をWEEKDAY関数のパラメータに指定して呼び出すことで、指定月1日の曜日(1:日曜〜7:土曜)を取得する。
最初に考慮すべきポイントは、第1週の1日の曜日までを空欄にすることだ。
上記の式で取得した曜日の数値が、6行目の値より小さい場合には、その月の1日には至っていないことを意味するので、その日の表示では空文字列を出力する。取得した曜日が6行目の値と等しければ、それがその月の1日にあたる日である。この1日を含め、第1週については、6行目の値からWEEKDAY関数の値を引いたものに1を加えることで、実際の日付を決定することができる。
少々分かりにくいかもしれないので、2003年5月のカレンダーを例に、1行目の数値の変化を見てみることにしよう。以下の表は、5月の第1週(カレンダーの1行目)の数値の変化を表したものである。
セル | セルの日付表示 | 6行目の値 | 6行目の値−WEEKDAY関数の戻り値 |
---|---|---|---|
B7 | 非表示 | 1 | -4 |
C7 | 非表示 | 2 | -3 |
D7 | 非表示 | 3 | -2 |
E7 | 非表示 | 4 | -1 |
F7 | 1 | 5 | 0 |
G7 | 2 | 6 | 1 |
H7 | 3 | 7 | 2 |
2003年5月第1週の式の値 |
2003年5月の場合には、「WEEKDAY(DATE($B$2,$B$3,1))」の値(2003/05/01の曜日番号)は「5=木曜」であるので、セルF7で初めて6行目の値と等しくなる。つまり、ここで「5−F6+1」を計算し、「1」という値が表示される。以降、金曜、土曜と「2」「3」が続いて表示される。
さて、カレンダーの第1週目が設定されてしまえば、あとは簡単だ。以下のようにセルを設定すればよい。
列 | 曜日 | 式 |
---|---|---|
B列 | 日 | =$Hn+1(n:前行の番号) |
C〜H列 | 月〜土 | =Xm+1(X:左セルの列番号、m:現在行の番号) |
第2週目以降の処理 |
例えばセルB8には「=$H7+1」がセットされるし、セルC8には「=B8+1」がセットされる。C8をセットした後、その内容をD8〜H8にもコピーし、さらに8行目の内容を9〜12行目にまでコピーすれば、各セルに対する式の設定を簡単に行える。
以上で、ほぼカレンダーの体裁は整うのだが、残念ながらまだこれで終わりではない。
月の最終日は28〜31までの間であるが、現状のままでは、これ以降の数値(32日など)までも表示されてしまう。本サンプルでは、最終日以降の数値をExcelの[書式]−[条件付き書式]メニューを使用して、背景色と同化させることで非表示と同じ効果を実現している。
これには、[書式]−[条件付き書式]メニューから表示される[条件付き書式の設定]ダイアログで次のように指定する。
条件式に入力された「=DAY(DATE($B$2,$B$3+1,0))」が大きなポイントだ。
「DATE($B$2,$B$3+1,0)」は、来月の0日の日付 ―― つまり、今月の最終日を求めている。DAY関数は引数に示された日付の日の部分だけを取り出すので、例えば、2003年5月の場合は31になるはずだ。
つまりここでは、31よりも数値が大きくなった場合に、文字色を背景色といっしょにすることで数値を非表示にしている。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.