VBA

EXCEL VBA でオリジナルカレンダーを作成

更新日:

はじめに

今年のゴールデンウィークは大型連休となりましたが、天皇の即位の日の5月1日が休みとなったためです。

東京オリンピックの年(2020年)は、「海の日」は7月23日に、「体育の日(スポーツの日)」は7月24日に、「山の日」は8月10日になります。

そこで今回はEXCEL VBAを利用してオリジナルカレンダーを作成してみました。

子供やペット、自動車やアニメキャラなどで自分だけのカレンダーを作ってみてはいかがでしょうか?

EXCEL2013(64ビット)で動作確認

オリジナルカレンダーVer2はこちら

ダウンロード

 

今回のカレンダーは、A4縦サイズです。上段に好みの写真やイラストを表示できます。

1か月単位で出力できるので必要な分だけ印刷して利用できます。

 

ちょこっと解説

カレンダーシート

メインのシートです。このシートでカレンダーを生成し印刷できます。

 

画像シート

月ごとに画像ファイルを設定しておけます。

画像は、カレンダーEXCELと同じフォルダか下位のフォルダに格納して利用します。

画像形式は、イメージコントロールで読み込み可能なもので、BMP・JPG・GIFなどが指定可能です。残念ながらPNGは取り扱えません。

 

祝日シート

祝日シートは、内閣府のホームページからCSVをダウンロードしてきたものをそのまま貼り付けております。

特定の日を休みにしたい場合は、このシートに追加して利用できます。

 

休日シート

休日シートは、毎年繰り返しの休みを定義します。会社の正月休みなどがそれにあたります。

 

VBA

メイン処理
  1. カレンダー(文字部分)をクリアします。
  2. 入力された年と月を取得し、カレンダーにセットします。
  3. 画像を取得しイメージコントロールにセットします。この時画像をズームするかしないかをセットします。
  4. 祝日・休日を配列で取得します。
  5. カレンダーの日付部分をセットします。この時、祝日・休日配列と該当する日は文字を赤色にセットします。

 

カレンダークリア処理
  1. 対象のセルをクリアします。この時、文字色を黒色にセットし、左端の日曜日は赤色に右端の土曜日は青色にします。

 

日付配列セット処理
  1. 入力された年月の1日の曜日を取得します。
  2. 月末の日付を取得します。開始日に1か月足して1日引きます。
  3. 2次元配列を用意し、第1週は取得した曜日にあわせてセットします。

 

 画像ファイル名取得処理
  1. 画像シートの該当月をSELECT文で取得します。
  2. 取得したファイル名に、カレンダー.xlsmのフォルダパスを結合させます。

祝日取得処理
  1. 祝日シートの該当月をSELECT文で取得します。
  2. 取得した休みの日付を添え字として配列に祝日名をセットします。

 

休日取得処理
  1. 休日シートの該当月をSELECT文で取得します。
  2. 取得した休みの日付を添え字として配列に祝日名をセットします。

 

終わりに

画像ファイル名の取得、祝日・休日の取得処理でSQLを利用していますが、SELECT文を渡すとレコードセットが返されるように共通化できますね。。。

画像シートはわざわざSELECTしなくても対応できますが、今後の拡張(複数の画像セットをあらかじめ用意しておくなど)を考えるとこのままでも良いのかなと。

 

スポンサードリンク

スポンサードリンク

-VBA
-,

Copyright© あきらちんの技術メモ , 2023 All Rights Reserved Powered by STINGER.