処理トリガーの色々
ざっと上げても、ボタン(フォームコントロール、Activexコントロール等々)、各種コントロールアイテム類(チェックボックス等々)、各種プロシージャの結果(loop処理の結果、分岐処理の結果等々)、セルのデータの変化(デフォルトでのexcel関数の再計算やvbaでの処理等々)等々きりがないくらいありますがその中で代表的なものを上げて説明します。
VBAプログラムの処理の起動トリガーの種類と特徴には以下があります。
●ボタンでの起動
別の項でも説明しましたが、主に3種類のものがあります(フォームコントロール、Activexコントロール、図形)。 このボタンはプログラムの起動のトリガーとして王道中の王道だし、最もわかりやすいものです。 起動させるための方法も容易で、「マクロの登録」で直接標準モジュールのプロシージャを直接リンク出来ます。 (activexボタンは若干方法が異なります、詳しくはボタンの「ボタンの色・文字を変える処理」の項を参照)
●なんらかの値の変化
典型的なのは、通常のexcelの関数があります。デフォルト設定ではその設定された関数のセルの値が変化した場合自動的に再計算処理が発生して、データが即時に更新されます。 vbaのプログラムでは再計算をする必要がある場合は、それなりの処理が必要になってきます。 ただ再計算については、複雑な処理の場合、一旦画面の処理を中止したり、再計算を中止したりして処理速度を早める場合があります。
●各種コントロールアイテム
各種のコントロールアイテムとは、チェックボックス、オプションボタン、コンボボックス、リストボックス・・・等々 様々あります。このようなアイテムはどちらかと言うと、あらかじめの設定値の選択等に良く用いられますが、これらを起動のトリガーとして用いる場合もあります。
別の項でも説明しましたが、主に3種類のものがあります(フォームコントロール、Activexコントロール、図形)。 このボタンはプログラムの起動のトリガーとして王道中の王道だし、最もわかりやすいものです。 起動させるための方法も容易で、「マクロの登録」で直接標準モジュールのプロシージャを直接リンク出来ます。 (activexボタンは若干方法が異なります、詳しくはボタンの「ボタンの色・文字を変える処理」の項を参照)
●なんらかの値の変化
典型的なのは、通常のexcelの関数があります。デフォルト設定ではその設定された関数のセルの値が変化した場合自動的に再計算処理が発生して、データが即時に更新されます。 vbaのプログラムでは再計算をする必要がある場合は、それなりの処理が必要になってきます。 ただ再計算については、複雑な処理の場合、一旦画面の処理を中止したり、再計算を中止したりして処理速度を早める場合があります。
●各種コントロールアイテム
各種のコントロールアイテムとは、チェックボックス、オプションボタン、コンボボックス、リストボックス・・・等々 様々あります。このようなアイテムはどちらかと言うと、あらかじめの設定値の選択等に良く用いられますが、これらを起動のトリガーとして用いる場合もあります。
各種コントロール | 図形 | フォームコントロール | activexコントロール | 図形(shape) |
---|---|---|---|---|
共通サンプル |
---|
この例は、フォームコントロールのボタンで簡単な足し算を紐づけたものです。
いちおう同じ処理を、単純にたしたものと、excel関数をvba側で使えるようにApplication.WorksheetFunctionというワークシート関数を使った場合の2つの例を示します。
コード1:単純足し算(標準モジュール)
コード2:ワークシート関数の利用(標準モジュール)
共通サンプル |
---|
activexコントロールのボタンの各々には、そのボタンが押されたときの処理は、シートモジュールに紐づけされます。従って、処理のコードをシートモジュールに全ておいて処理する方法と、本元の処理は標準モジュールに書いておいてあくまでシートモジュールではその処理を呼び出すかたちにする方法があります。
CommandButton1に紐づくコード(シートモジュール)
シートモジュールから呼び出されるsumfunc3のコード(標準モジュール)
CommandButton1に紐づくコード(全てシートモジュールに設置した場合)
共通サンプル |
---|
セルの値が変化したときに、ある処理が開始される良い例としては、excelのセルに「=SUM(R[3]C[1]:R[3]C[4])」の様な数式を設定した場合があります。この場合、R[3]C[1]:R[3]C[4]の範囲のセルの値がなんらかの変化をした場合、そのセルの値が変化した瞬間に自動的にその数式の再計算が行われ、即表示されます。 excelはこの様な数式の自動再計算がデフォルト設定になっています。(設定により再計算を止める事も出来ます) 一方、vbaの処理では自動再計算はされず、この様な場合はその処理開始の条件を明示的にする必要があります。
以下の処理の場合、あるシート上のの変化(Worksheet_Changeイベント)をIntersectメソッドで補足して、変化があった場合処理を進めるようにします。この方法は定番になっていますので、色々試してみてください。
この例はある範囲(Range(Cells(3, 6), Cells(13, 6))に変化があった場合、その計算結果(足し算)を特定のセル(Cells(21, 6))に表示させます。
セルの変化による再計算の例(シートモジュール)
共通サンプル |
---|
各種のコントロールアイテムすなわち、チェックボックス、オプションボタン、コンボボックス、リストボックス・・・等々は元々は、ある設定値のパラメーターの選択等に多く用いられる事が多いですが、あるアイテムをチェックした時点で即、プログラムを起動させるトリガーの機能をさせる事が出来ます。トリガーとしてのコントロールアイテムではActivexコントロールが便利です。
以下の例はチェックボックスをチェックアクションをトリガーとして、足し算の計算をさせています。
チェックボックス(Activexコントロール)のトリガーの例(シートモジュール)
以上のTIPSをまとめた共通サンプルファイルです。
処理トリガーの違いを実際に動かして試すことが出来ます。