目標
VBAのイベントについて概要を理解する
「フォームコントロール」「ActiveX コントロール」の違いを確認する
「フォームコントロール」を理解して利用できる
「ActiveX コントロール」を理解して利用できる
VBAのイベント
VBAのイベントの概要
VBAのイベントとは
VBAのイベントとはプロシージャが動作するための「きっかけ」のことをいいます。これまで、この記事ではプロシージャを動かすのにVBEの実行ボタンを利用してきましたが、プロシージャのイベントはVBE内の実行ボタン以外にもExcelのシートに配置できる「フォームコントロール」や「ActiveX コントロール」からの実行、オブジェクトを利用した「セルの値の変更時のイベント」「シートの選択時のイベント」「ブックを開いた時のイベント」(イベントプロシージャ)での実行など様々あります。この記事では「フォームコントロールボタン」や「ActiveX コントロールボタン」について触れています。
2つのコントロールの違い
2つのコントロールの違い
コントロールの位置を確認する
2つのコントロールの利用にはいずれも「開発」タブの「挿入」を展開して利用します。
「挿入」を選択すると「フォームコントロール」と「ActiveXコントロール」が表示されます。
2つのコントロールの違い
いずれのコントロールでも同様の操作を行うことができますが、「フォームコントロール」は、ワークシート内の値やフォームに入力された設定値を取得して、ワークシートへ返すという処理が簡単に行えるという特徴があります。VBAを扱いたいときは「マクロの登録」を利用します。「ActiveX コントロール」には専用のVBAのイベントが準備されます。設定もVBEを通して行うようになっています。具体的な違いを「リストボックス」と「チェックボタン」の機能を例に確認していきます。
「フォームコントロール」の概要と利用方法
「フォームコントロール」の概要
フォームコントロールは「ワークシート内での値の受け渡し」や「フォームに入力された値の利用」を容易に行える機能です。」VBAのプログラム(プロシージャ)を利用したい場合は「マクロの登録」を利用します。
「フォームコントロール」の「リストボックス」
例えば次のような表がワークシートにあったとします。この表の値をフォームコントロールのリストで取得してワークシートの任意のセルに返すといった操作を行ってみたいと思います。
コントロールの挿入から「フォームコントロール」の「リストボックス」を選択します。
ワークシート上で十字キーが表示されます。「+」ドラッグしてリストを作成します。
リスト内で右クリックをするとメニューが表示されます。フォームコントロールの特徴は設定時に「コントロールの書式設定」を扱うことです。
コントロールの書式設定を使ってリストボックスの設定を行います。コントロールの書式設定を選択するとダイアログボックスが表示されるのでメニュー内の「コントロール」を選択します。表示された入力ボックスに値を入力して「OK」をクリックすると設定が完了します。
「入力範囲」にワークシート内の商品項目部分(セルB4からB12)を選択します。
「リンクするセル」は選択された項目を表示するセルです。セルB14としています。
入力ができたら「OK」をクリックします。
リストボックスの中身が表示されます。
商品を選択すると「リンクするセル」で設定したセルB14にリストの番号が表示されます。
「フォームコントロール」への「マクロの登録」
フォームコントロールでは「マクロの登録」をすることでVBAのプログラムを利用することが可能になります。イベントは操作されたときとなります。
次のプロシージャをリストボックスに登録して実行結果を確認します。
実行結果
「フォームコントロール」の「チェックボックス」
フォームコントロールからチェックボックスを選択してリストボックスの時と同じように配置します。
配置後の表示は次のようになります。続けてコントロールの書式設定を設定します。
今回はリンクするセルにセルI3を設定しています。
チェックを入れたり外したりすることでセルI3のBoolean値が変化します。
「フォームコントロール」への「マクロの登録」
実行結果
「ActiveX コントロール」の概要と利用方法
「ActiveX コントロール」の概要
ActiveXコントロールは「ワークシート内での値をVBEのプロパティウィンドウやプロシージャを通して処理に利用する」ときに使用します。フォームコントロールでも同様の操作を「マクロの登録」で行うことが可能ですが、大きな違いは、ActiveXコントロールでは「様々なVBAのイベント」を利用できることです。「様々なVBAのイベント」には「クリック、ダブルクリック、値の変更」などがあります。
「ActiveX コントロール」の「リストボックス」
ActiveX コントロールでもワークシートへの設置はフォームコントロールと同じ操作で行えます。
ActiveX コントロールの編集には「デザインモード」を選択しておく必要があります。
まずは「プロパティ」を選択して「プロパティウィンドウ」を開きます。プロパティウィンドウが開いたら必要な個所を設定していきます。今回は値を返すセルの選択とリストとして取り込むセルの範囲を設定します。
設定ができたらデザインモードを解除してリストボックスを操作してみます。
ActiveX コントロールでもフォームコントロールと同様の操作を行うことができます。
「ActiveX コントロール」でのプロシージャの利用
ActiveX コントロールではフォームコントロールのマクロの登録と同じようにプロシージャを利用できます。違いとしてはプロシージャの実行に様々なイベントを利用できるという点があります。ここではイベントの設定を確認していきたいと思います。
再度「デザインモード」を選択した状態にしてリストボックスを右クリックし、「コードの表示」を選択します。
コードウィンドウが表示されます。コードウィンドウの左上のプルダウンメニューに「ListBox1」右上のプルダウンメニューに「Click」が設定されています。右上のメニューを変更すると新しいプロシージャが表示されます。
このプルダウンメニューは選択されるプロシージャが変わると切り替わります。これはプロシージャが個別で左上のオブジェクト専用であって、右上のイベントを利用することを意味しています。
プロシージャにプログラムを追記して操作をしてみます。
実行結果
リストの項目をダブルクリックするとイベントが起こりプロシージャが動作します。プロシージャ内に追記したプログラムが動いてMsgBoxが表示されました。
「ActiveX コントロール」の「チェックボックス」
続いて「ActiveX コントロール」の「チェックボックス」を利用していきます。「ActiveX コントロール」の「チェックボックス」を選択して配置します。
チェックボックスの配置が終わったらプロパティウィンドウからチェックボックスのオブジェクト名を確認しておきます。
ActiveX コントロールのチェックボックスで利用する値はプロパティウィンドウにある「Value」となります。プロシージャ内に追記するプログラムでは「オブジェクト名.プロパティ名」で値を取得します。今回の場合はCheckBox1.Valueで取得できます。
「ActiveX コントロール」のチェックボックスでプロシージャを利用
デザインモードを選択状態で「コードの表示」を選択します。コードウィンドウに表示されたプロシージャ内にキャプチャにある赤枠内のプログラムを追記します。
実行結果
今回は以上となります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。