ExcelVBA自作カレンダーコントロールへ祝日・休日設定する

ExcelVBA自作カレンダーコントロールへ祝日・休日設定する

前回のカレンダー作成のときに書いた「専用シートを作ってフラグを立てといて参照する」というのを、頭の中にせっかく浮かんだんだから、書いてみようかなーと思いました。


前置き

こちらの記事の続きです。

今回は、表示の度に日付の色をリセットするので、フォームでの色設定はデフォルトのままでOKです。

140804-19 140804-20

前回設定したこの手順がいらなくなります。

休日リストをつくる

140807-1

シート名はなんでも良いですが、このように作ってみます。行が月、列が日で31まで。休みにしたい日に 1 を入れてみます。

コード

UserForm2(カレンダーを描いたフォーム)のコード画面に、前回こういうプロシージャを書いているはず。

ここに、以下のハイライト部分を追記します。

12~18行目でカレンダーの日付の色をリセットしています。数値を変えれば好きな曜日を好きな色に出来るので、土日休みじゃないお仕事の方にもいいかも。26~31行目が、さっき作ったシートから該当の日付セルを探してフラグが立ってるか参照している部分です。

まず、A列に該当の年があるか探して、見つかった時だけ処理します。該当の行番号は、年の入っていた行 + 月の数字 -1 なので、fnd.Row + mm - 1となり、該当の列番号は、日付の数値 +2(A, B列分) で、i + 2となります。

そこのセルに 1 が入ってたら、この日はお休みなので、ラベルの文字色を赤くします。(29行目)

140807-2

これで走らせると、休日設定した部分が赤くなります。

休日出勤日も設定してみる

ここは祝日休みなんだけど、この土日は稼動日なんだよなー!なんてことも出来ます。

140807-3

さっきは 1 にしてましたが、こんな感じに「休」「出」など好きな文字を入れておいて、

「休」なら赤、「出」なら黒、というように色をつけてあげます。

140807-4

走らせると、こんな感じ。

所感

休日リストのシートはひとつのブックで独立なので、汎用性はありませんねー。少人数、少ブックでやるのなら、って感じでしょうか。自由に設定出来る反面、使い方は限定的になっちゃうかもですが、こういう方法もあるということで。

休日を共有したカレンダーをあちこちで使いたいなら、外部データベース(Accessとか)に休日フラグのテーブルを持たせてそこを読み込んで、って感じのほうが使い勝手はいいと思います。

公開日:2014/08/07

9件のコメント

  1. teru より:

    休日リストのA列にだけ日付を入れて休日指定したいのですが
    どのようにしたら良いかご教示頂けますでしょうか?

    • *you より:

      teruさん、コメントありがとうございます。「休日リスト」シートから休日を検索する部分を、

      こうすればいいんじゃないかなーと思います。

  2. teru より:

    ありがとうございます。
    ちょっと気になる点がありまして、コンボボックスで西暦を手入力すると
    追加したSet fndの行でエラーになってしまいます。
    使用には差し支えないのですが何がいけないのでしょうか?
    DLした方は問題ないです(4桁まで)

    • *you より:

      ああー、コンボボックスの手入力は考えてなかったです。.Findは日付の検索に不安定な動きをすることがあるので、それかもしれませんね。A列の最終端を取得して、ループで回すほうが確実かもしれません。

      昔書いたコードなので宣言とかイケてないなと思って、プロシージャごと書き直してみました。

      これで動くと思います。ただ、コンボボックスに4桁より大きい数値を入れるとか、文字列入れちゃうとか、そういうエラー処理はしておりませんのでご了承ください。

  3. teru より:

    教えて頂きましたコードにて業務で使える最高の
    カレンダーツールとなりました。
    分かりやすくてとても参考になります。
    ありがとうございました。

  4. Mimi より:

    とても分かりやすいご説明で、助かりました。form1をアレンジし、オプションボタンとコマンドボタン、フレームで、異なる国のカレンダーを表示できるようになりました。気になるのは、祝日のフォントのみ太字にどうにか設定できないかな、ラベルクリックで何の祝日なのかを表示できないかと模索しています。

    • *you より:

      Mimiさん、コメントありがとうございます。本文中に示したマトリクス状の「休日リスト」で、休日のセルに「1」の代わりに「祝日の名称」が入っているものと仮定すると、こんな感じでしょうか。

      ラベルコントロールのTagというプロパティに、セルの内容を入れておきます。あとは、クリックで走るプロシージャにて

      このように、該当ラベルコントロールのTagの内容をメッセージボックスで表示できます。

  5. Mimi より:

    ありがとうございます。残念ながらまだ休日表示ができていません。フォーム1のUIを変更したのが原因なのかと思い、1から組み直してみたりしていますが実装にいたっておりません。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)