カレンダー入力フォームの最速実装
- yuji fukami
- 9月25日
- 読了時間: 5分
概要
今回紹介するのは、普段私が行っているExcel VBA開発の一例です。実際の操作感や開発スピードをイメージしていただくことを目的としています。
例として取り上げるのは「日付入力用のカレンダー入力フォーム」です。いわばユーザーフォームの拡張版で、セルをダブルクリックするとカレンダーが表示され、そこから日付を入力できる仕組みになっています。
具体的には、祝日一覧や会社の営業日カレンダーなどをあらかじめ登録しておくことで、休日入力や営業日入力を便利に行えるようになります。このような仕組みをどのように実装するのかを、実際の動画を交えて紹介していきます。
開発作業時にはすでに準備しているものを利用し、1分以内に形に実装が完了するように整えております。今回はこちらを例に、具体的な解説を進めていきたいと思います。
読者様に起きましては
「こんなノウハウがあるのか」「この方法はアイデアとして採用したい」
と思っていただければ幸いです。
技術解説
動画では一瞬でやっていますが、作業手順は次の通りです。
①「B2」にヘッダーの入力と罫線の設定
②「B3」以下に何か入力するな罫線が追随するを条件付きを設定する
③「B2」に名前定義で「日付1」と入力しておく
④ワークシートのコードウィンドウにテンプレートのイベントプロシージャのコードを入力する
「スーパー開発ショートカット」
途中途中でのコードを入力する記の画像のようなユーザーフォームが表示されてます。こちらは普段は「スーパー開発ショートカット(改名予定)」と呼んでいますが、F1キーを押すことでユーザーフォームが実行されて、そちらからコマンドをCADソフトのような感じにキーボードで入力することで特定のマクロを呼び出すような処理を行っています。
まあ、このような操作をすることで、「どののマクロを実行するかっていうのを手が覚えておく」ことができます。通常はこのような汎用的なマクロはリボンなど登録しますが、この方法ではリボンの様にいちいちマウスを動かす必要もなく、特定のマクロを一瞬で呼び出せるようにしてあります。
ちなみに最速な方法として、各マクロをショートカットキーを登録するっていう方法もありますがショートカットキーの登録だと、普段デフォルトで利用するようなショートカットキーを上書きしてしまったり、どんどん機能が増えてしまった場合にショートカットキーの登録先が無くなってしまったりというデメリットがあるのですが、スーパー開発ショートカットではこのようなデメリットも一切なくなります。
以上の様な理由で最も最速でマクロを呼び出せる機能を常に常に使っております。


追随する罫線(条件付き書式)
B3以下に設定している条件式を解説します。
こちらは。1つの条件書式を下の画像のように設定しています。
1つ目の条件付き書式は空白でない場合は左右に罫線を付けて、2つ目め条件付き書式は1つ下のセルと値が異なる場合に下側に罫線を設定するようになっています。

その下側の条件付き書式は下記の画像になっており、OFFSET関数を利用することで、途中に行が挿入されたりとか消去されたりということの影響を受けないような関数となっております。

この条件付書式を設定する時に、下記のような汎用プロシージャを利用しています。引数でTargetにその条件付書式を設定したいセル範囲を与えるだけで条件付書式が設定できるようになってます。
ダブルクリックでカレンダー呼出用のイベントプロシージャ
ダブルクリックでカレンダー呼出のためにはワークシートのコードウィンドウには下記のようなプロシージャを設定しておりました。
このコードを記述する時に、イミディエイトウィンドウで「MCCCarendarDblClickShow」というプロシージャを実行しました。こちらは特定のテンプレートのコードを実行してクリップボードに格納するためだけの処理で、よく記述するようなコードはこのような形でいつでも呼び出せるようにして、1から記述することはせずコーディングの時短を図っています。
ダブルクリックイベントプロシージャに記述している「EventShowCalendarDayCol」プロシージャですが、こちらはワークシート内において名前定義で「日付*」のような名前定義がある場合、そのセル以下をセル範囲として、そこの範囲をダブルクリックするとカレンダーが出るような処理を実現しております。すなわち、ワークシート内でそのような名前定義をもう設定するだけでカレンダーが出現するような機能を後で追加するようなことも可能なようなことを考えて構築しているものです。
カレンダー入力フォーム
日付を入力するようのカレンダーは下記のような画像のようなものが設定しております。こちらはユーザーフォームとクラスモジュールを利用したものです。

コードは記載しませんが、添付の圧縮ファイルの中にインポート用のファイルを添付しておりますので。利用したい場合はこちらを利用するようにしてください。
下記画像のように2つのbasファイルが入っていますが、こちらをVBEでそのままクリック&ドラッグでインポートすれば、カレンダー入力フォームがインポート完了です。





コメント