このページの内容について
このページは、VBAエキスパート(ExcelVBAベーシック)試験合格講座の第九回記事です。公式テキスト第3章「モジュールとプロシージャ」と第10章「マクロの実行」の内容について解説します。自分でも手を動かしながら読み進めてください。
マクロの実行方法
事前準備
サンプルコード(クリックでコピー)
'■①メッセージを表示するSubプロシージャ
Public Sub Test_Msgbox()
Call MsgBox("メッセージを表示する関数です。")
End Sub
'■②イミディエイトウィンドウに文字列を出力するSubプロシージャ
Private Sub Test_DebugPrint()
Debug.Print "文字列をイミディエイトウィンドウに出力します"
End Sub
'■③2つの引数を足し算して返すFunctionプロシージャ
Public Function Test_Sum(ByVal x As Long, ByVal y As Long) As Long
Test_Sum = x + y
End Function
'■④"Hello"という文字列を返すFunctionプロシージャ
Private Function Test_GetHello() As String
Test_GetHello = "Hello"
End Function
上記サンプルコードをモジュールに貼り付ける
プロシージャ(マクロ)の実行方法はいくつか種類があるため、1つずつ解説します。まずはVBEを立ち上げ(「Alt」+「F11」)標準モジュールを作成し、上記のサンプルコードをコピーして貼り付けてください。

VBEからの実行
VBEの画面でプロシージャ(マクロ)内にカーソルを合わせた状態で、タブの再生ボタン「▶」を押すとマクロを実行できます。再生ボタンにはショートカットキーとして「F5」が割り当てられており、開発中は最もよく使用するショートカットのひとつです。この方法でマクロを実行する場合、③のFunctionプロシージャは実行することができません。これはマクロ③には「引数」が必要であり他のプロシージャなどから呼び出して使用する必要があるためです。

「マクロ」メニューからの実行
Excelの開発タブから「マクロ」を選択すると実行可能なマクロの一覧が表示されます。このダイアログからもマクロは実行できます。この方法では①のマクロのみが表示されており、他のマクロは実行できません。それぞれ理由があります。②は「Sub」の前に「Private」を指定しているためです。「Private」を指定するとそのプロシージャが存在するモジュール内からしか実行できないようになります。③・④はFunctionプロシージャであり返される値を受け取ることのできないダイアログや後述するボタンからは実行ができなくなります。
開発タブ⇒「マクロ」を選択する

マクロメニューが立ち上がるため、実行したいマクロを選択し「実行」を押す

ボタンなどに登録して実行
Excelの開発タブから「挿入」を選択し、ボタンを配置してみましょう。マクロの登録画面が立ちあがり、ボタンにマクロを登録することができます。実行可能なマクロは「マクロ」メニューと同じです。
開発タブ⇒「挿入」⇒「ボタン(フォーム コントロール)」選択する

マクロの登録画面が自動で立ち上がるため、登録したいマクロを選択する

ボタンの位置やサイズをマウス操作で決めます
ボタンの配置をセルに合わせてきれいに配置するには「Alt」を押しながらボタンのサイズを指定します。
ボタンが作成されました
下記のようにボタンが作成されるため、ボタンを押すとマクロを実行することができます。

ユーザー定義関数として実行
FunctionプロシージャはExcelの関数と同じようにセルに入力して呼び出すことができます。自作の関数のことを「ユーザー定義関数」と呼びます。ここでも「Private」指定したプロシージャ(④)は呼び出すことができません。

クイックアクセスツールバーに設定して実行する
クイックアクセスツールバーの設定を開く
一番簡単にクリックアクセスツールバーの設定を開く方法は下記画像の「その他のコマンド(M)」ボタンを押すことです。うまくいかない場合は「ファイル」⇒「オプション」⇒「クイックアクセスツールバー」からでも開けます。

コマンドの選択で「マクロ」を選ぶ
コマンド選択のプルダウンで「マクロ」を選択します。

クイックアクセスツールバーのユーザー設定で任意のオプションを選択する
クイックアクセスツールバーのユーザー設定(O)では、クイックアクセスツールバーの編集をExcel全体に適用するか、特定のブックにのみ適用するかを選択できます。任意のオプションをプルダウンで選択します。

任意のマクロを選択し「追加」「OK」
クイックアクセスツールバーから実行したい任意のマクロを選択し「追加」⇒「OK」で設定完了です。

クイックアクセスツールバーにマクロを登録できました

補記:マクロの発動にトリガーを設定する
ブックやシートのアクションに紐づけてマクロを実行する
VBAエキスパート試験の範囲ではありませんが、ダブルクリックされたときやシートが選択されたときなどの条件が満たされたときに自動でマクロを実行する(トリガーを設定する)方法について説明します。
シートモジュールかブックモジュールを開く
シートモジュールやブックモジュールにも標準モジュールと同様、マクロを記述することができます。ここではシートモジュールを例に説明をします。まずはプロジェクトエクスプローラーでシートモジュールを選択し、コードウィンドウを開きます。

オブジェクトのプルダウン「(General)」を「Worksheet」に変更する

自動的にプロシージャが生成されます
「オブジェクト」というプルダウンを変更すると自動的にプロシージャが生成されました。このプロシージャ「Worksheet_SelectionChange」はワークシートで選択範囲を変更したときに実行されるプロシージャです。

「オブジェクト」プルダウンの右の「プロシージャ」プルダウンを変更する
右のプルダウンを開くとトリガーの一覧が表示されるため、任意のトリガーを選択してください。下記例では「BeforeDoubleClick(ダブルクリックされたあとに実行)」を選択しました。

サンプルコード(クリックでコピー)
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Call MsgBox("ダブルクリックは禁止!", vbCritical)
Cancel = True
End Sub
サンプルコードをシートモジュールに貼り付けます
上記サンプルコードをコピーしてシートモジュールに貼り付けてみましょう。

トリガーを設定することができました
Excelのシートに移動し、セルをダブルクリックするとメッセージが表示され、ダブルクリックがキャンセルするマクロが実行されました。

Comment