エクセルマクロのイベントプロシージャ
イベントプロシージャとは、ワークブックやワークシートの対し、なんらかのアクション(イベント)をした際に発動するマクロのことを言います。
イベントの種類は「ワークブックを開いたとき」や「ワークシートをアクティベートしたとき」「セルをダブルクリックしたとき」など様々なアクションに対して用意されています。
私が使ったことのある例としては
<ブック系>
「ワークブックを開いたとき、開いた日時とユーザーの情報を取得する」
<シート系>
「対象のワークシートをアクティベートしたらシートの書式を所定のものにする」
「ダブルクリックしたらダブルクリックしたセル内の値に1を足す」
などです。アイディア次第でいろいろ使い道が見つかるので意外と重宝しますよ。
◆注意点◆
<ブック系>
「ワークブックを開いたときに◯◯する」
↑
マクロを有効にして開いてくれないと発動できません。(むなしい・・)
<シート系>
「対象のシートをアクティベートしたときに◯◯する」
「選択セルを変えたら◯◯する」
↑
別マクロで操作すると毎回イベントが発動されて処理が極端に遅くなったりします。
イベントプロシージャを記述する場所
普段記述するのは標準モジュールだと思いますが、イベントプロシージャの記述場所は別(ブックorシートのオブジェクトモジュール)になります。
イベントプロシージャを記述する
今回ルーレットで使用するのは、シート内の選択セルを変えたときに発動するイベントプロシージャ(SelectionChange)です。
記述のステップ
1.シートモジュールを開く
2.イベントを選択する
3.記述する
1.モジュールを開く
対象のシートモジュールをダブルクリックすればモジュールが開きます。
2.イベントを選択する
イメージ画像の①部分が(General)となっているプルダウンをWorksheetへ変更する。
イメージ画像の②部分で対象のイベントを選択することができます。
今回は「セルを選択したら選択したセルの値を取得する」なので、SelectionChangeを選びます。
SelectionChangeを選択すると
Private Sub Worksheet_SelectionChange(ByVal Taret As Range)
End Sub
の文字が自動で入ると思います。お気づきかと思いますが、イベント発生後の動きは、このPrivate Sub 〜〜〜 と End Subの間に記述します。
また、画像にあるようにPrivate〜〜〜のところに記述のある「Target」は何かというと、セレクトしたセルの変数となります。
なので、Taget.Valueとすると選択したセルの値が取得できることになります。
今回はルーレットが終わるまで選択した値を持っておきたいので、別途「設定」シートを作成し、そのシートへ値を格納しておくこととします。
Sheets(“設定”).Range(“B1”) = Target.Value
End Sub
これで選択してもらったセルの数値が取得できました。