Excelで予定表などを作成する時にも、いちいちカレンダーを作成するのは面倒である。しかしMS Officeにあらかじめ用意されたカレンダー・コントロールを利用することで、カレンダーを自由にExcelなどに貼りこむことが可能となる。
対象ソフトウェア:Excel 2000/Excel 2002/Excel 2003
Excelワークシート上で予定表などを作成する際に、毎月のカレンダーを作成するのは、単純ながらも意外と面倒な作業である。
「TIPS―Excelで万年カレンダーを作成する」では、年月を入力するだけで自由に変更できるカレンダーを紹介したが、ある程度、固定的なフォーマットで充分という場合や、単純に参照用としてカレンダーをシート上に用意したいという場合にはMicrosoft Officeに用意されている「カレンダー・コントロール」を利用すると便利である。
カレンダー・コントロールはそれ自体に書き込みなどはできないものの、年月をコンボ・ボックスで選択することができるし、コントロール上で発生したイベント(日付が選択された、年や月が変更になった、など)に応じてVBA(Visual Basic for Application)と連携できるなど、有利な点も多い。
ここでは、このカレンダー・コントロールを利用して、選択された日付に含まれるスケジュールを動的に取得・表示するサンプルを紹介することにしよう。やや手順が面倒かもしれないが、各ステップの意味を理解しながら、手順を追っていただきたい。
カレンダー・コントロールからスケジュールを動的に呼び出すためには、検索の対象となるスケジュール・リストを別に用意しなければならない。
まずは新しい[schedule]シートを作成してみよう。次の画面のように、スケジュール・リストのシートには「日付」と「予定」を入力する。リスト上の値は単なる固定的な文字列なので、特筆すべきことは特にないだろう。読者自身のスケジュールを適当に入力してみて欲しい。
Excelのメニュー・バーの[挿入]−[オブジェクト]を選択すると、次のような「オブジェクトの挿入」ダイアログが表示される。現在使用可能なオブジェクトの一覧がリストアップされるので、「カレンダーコントロール9.0」を選択する(インストールされているExcelのバージョンによっては、「Microsoft カレンダー コントロール 11.0」のように、名称やバージョン番号が少し異なっていることがある)。
カレンダー・コントロールは、とくに設定しなくてもそのまま使用することができるが、もしも外見のカスタマイズなどを行ないたい場合には、専用のプロパティ・シートから行なうこともできる。カレンダー・コントロールを選択して右クリックすると、ポップアップ・メニューが表示されるので、[Calendarオブジェクト]−[プロパティ]を選択する。
*カレンダー・コントロールを選択するためには、Excelが「デザイン・モード」になっていなければならない。デザイン・モードにするためには、メニュー・バーの[表示]−[ツールバー]−[Visual Basic]を選択し、表示された「Visual Basic」ツール・バーにある三角定規の形のアイコン(デザイン・モード)をクリックしてアクティブにする。
カレンダー・コントロールのプロパティ・シートでは、背景色や曜日・日付の表示方式、フォントなどを変更することができる。いずれも動作には影響しないので、適宜、好みに応じて変えれば良い。
デザイン・モードの状態でカレンダー・コントロールをダブルクリックすると、Visual Basic Editorが自動的に開き、「calendar1_Clickイベント プロシージャ」のスケルトンだけが自動生成されているはずだ。
そこで、以下のように1行だけコードを追加して欲しい。
Private Sub calendar1_Click()
Cells(1, 1).Value = calendar1.Value
End Sub
これによってカレンダーがクリックされたタイミングで、選択された日付(calendar1.Value)がセルA1(Cells(1, 1))にセットされる。
スケジュール・リストの検索には、VLOOKUP関数を利用すると便利である。セルA2に以下の式を入力してみよう。
=IF(A1<>"",VLOOKUP(A1,schedule!B2:C11,2,FALSE),"")
VLOOKUP関数の構文や使用方法については、「TIPS―VLOOKUP関数でExcel帳票への自動入力を可能にする」を参考にして欲しい。
ここではセルA1の値をキーにしてスケジュール・リストの内容を参照し、対応する日付の予定を出力している。「schedule!B2:C11」の部分はスケジュール・リストの大きさによって変化するので、適宜、自分が入力した内容にあわせて変更していただきたい。
セルA2の内容をそのまま見せるようにしてもよいが、カレンダーの日付を切り替えていると、あることに気付くだろう。そう、選択した日付がスケジュール・リストに含まれていない場合には、エラー文字列「#N/A」が返されてしまうのである。そのままでも実害はないが、これではまずいので、エラー時にはメッセージを表示するように処理しておこう。
セルA18に以下のような式を入力してみて欲しい。
=IF(ISERROR(A2),"本日の予定はありません",A2)
ISERROR関数は、指定されたセルが「#N/A」や「#REF」のようなエラーを返した場合にTrueを返すという判定関数である。ここでは、セルA2が「#N/A」の場合には「本日の予定はありません」と返すことにする。
なお仕上げとして「A18:F24」のセルを結合し、抽出された予定がきれいに表示されるように整形しておく。またカレンダー・コントロールの大きさと場所を調整し、計算用のセルA1、A2はユーザの目に見えないようにしておくとよいだろう。その結果できあがった簡易スケジュール表が以下のイメージである。選択した日付に応じて、表示が変わることを確認してみよう。
このように、カレンダー・コントロールは非常に便利でリッチなコントロールである。単なる参照用だけではなく、表に対して、日付を簡易に入力したい場合などにも活用できるので、活用してみてほしい。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.