EB000009_VBAエキスパート(ExcelVBAベーシック)合格講座/第九回:マクロの実行方法

VBAエキスパート(ExcelVBAベーシック)合格講座/第九回:マクロの実行方法 ExcelVBA Basic
  1. このページの内容について
  2. マクロの実行方法
    1. 事前準備
      1. サンプルコード(クリックでコピー)
      2. 上記サンプルコードをモジュールに貼り付ける
    2. VBEからの実行
    3. 「マクロ」メニューからの実行
      1. 開発タブ⇒「マクロ」を選択する
      2. マクロメニューが立ち上がるため、実行したいマクロを選択し「実行」を押す
    4. ボタンなどに登録して実行
      1. 開発タブ⇒「挿入」⇒「ボタン(フォーム コントロール)」選択する
      2. マクロの登録画面が自動で立ち上がるため、登録したいマクロを選択する
      3. ボタンの位置やサイズをマウス操作で決めます
      4. ボタンが作成されました
    5. ユーザー定義関数として実行
    6. クイックアクセスツールバーに設定して実行する
      1. クイックアクセスツールバーの設定を開く
      2. コマンドの選択で「マクロ」を選ぶ
      3. クイックアクセスツールバーのユーザー設定で任意のオプションを選択する
      4. 任意のマクロを選択し「追加」「OK」
      5. クイックアクセスツールバーにマクロを登録できました
  3. 補記:マクロの発動にトリガーを設定する
    1. ブックやシートのアクションに紐づけてマクロを実行する
      1. シートモジュールかブックモジュールを開く
    2. オブジェクトのプルダウン「(General)」を「Worksheet」に変更する
      1. 自動的にプロシージャが生成されます
      2. 「オブジェクト」プルダウンの右の「プロシージャ」プルダウンを変更する
      3. サンプルコード(クリックでコピー)
      4. サンプルコードをシートモジュールに貼り付けます
      5. トリガーを設定することができました
  4. 【PR】VBAエキスパート試験対策記事

このページの内容について

このページは、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

引数とは関数に渡す値のことで、Excelの関数で()内に指定する値と同じものです。

上記サンプルコードをモジュールに貼り付ける

プロシージャ(マクロ)の実行方法はいくつか種類があるため、1つずつ解説します。まずはVBEを立ち上げ(「Alt」+「F11」)標準モジュールを作成し、上記のサンプルコードをコピーして貼り付けてください。

VBEからの実行

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

「マクロ」メニューからの実行

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

「Public/Private」の指定を省略すると「Public」が指定されたものとみなされます。VBAエキスパート試験ではすべて省略して記述されますが、実務ではユーザーが実行可能なプロシージャとマクロ内での呼び出し専用のプロシージャは明確に分けて管理する方が可読性が上がります。

開発タブ⇒「マクロ」を選択する

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

ボタンなどに登録して実行

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のシートに移動し、セルをダブルクリックするとメッセージが表示され、ダブルクリックがキャンセルするマクロが実行されました。

【PR】VBAエキスパート試験対策記事

当サイトでは、オデッセイコミュニケーションズ社が運営する試験であるVBAエキスパートExcel VBA ベーシックExcel VBA スタンダード)の出題範囲をベースに用語や各種関数の解説などを行っています。試験合格に向けて必須と言われる公式テキストに沿って解説をしています。受験をするか悩んでいる方、テキストとは別視点の解説を見てみたい方、受験はしないがExcelVBA(マクロ)に興味がある方へ向けた記事です。

Comment