マクロの実行方法7選

VBAでSubプロシージャを呼び出して使う方法は、マクロボタンに登録したプロシージャを実行する方法以外にいくつもあります。
この記事では、マクロボタンで実行する方法を含めて、7つの方法をそれぞれ紹介します。

# 1．マクロボタンに登録して実行する
これが一番オーソドックスな方法です。他の方法では開発タブを表示したり、ショートカットキーを割り当てたりしてユーザー自身でそのショートカットキーを覚えておく必要があったりします。
マクロに詳しくないユーザーにもマクロを使わせるなら、マクロ有効ブックにマクロボタンを設置して実行してもらいましょう。

![スクリーンショット 2024-11-03 152455.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479442/74411937-be61-5a04-6c5f-af59127b455d.png)

なお、画像例では単にボタンとしていますが、実行するマクロの内容がユーザーに伝わるようなテキストをマクロボタンに表示しましょう。

# 2．Alt + F8で[マクロ]ダイアログから実行する
これは開発タブから表示することもできます。現在開いているマクロ有効ブックや、個人マクロブック、アドイン等に登録しているマクロを実行できます。

![スクリーンショット 2024-11-03 155842.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479442/0777f502-ac14-a8d9-ad8b-8e1e7522fb11.png)

実行したいプロシージャを選択して、「実行」ボタンを押しましょう。

ただし、Private Subプロシージャやモジュールの先頭に「Option Private Module」を書いている場合は[マクロ]ダイアログに表示されません。
そのため、メインのプロシージャから呼び出す目的のみで利用しているサブプロシージャは、最初からPrivate Subにしておくと、[マクロ]ダイアログに表示されるプロシージャの数がすっきりして便利です。（Private Subにしていなくても、引数が必要なSubプロシージャやFunctionは表示されません。）
※Private Subプロシージャやモジュールの先頭に「Option Private Module」を書いている場合は、原則、モジュール内から呼び出せます。

# 3.[マクロ]ダイアログからショートカットキーを登録する
2.の[マクロ]ダイアログの「オプション」から、ショートカットキーを登録できます。

![スクリーンショット 2024-11-03 153324.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479442/7bbc8029-ca80-5cad-90cf-5807fd2bbdc1.png)

登録できるのは、Ctrl+半角アルファベットか、Ctrl+Shift+半角アルファベットです。（数字はショートカットとして登録できません。）
そのため、52個割り当てができることになります。この52個のうち、標準で割り当てられているのが27個あり、標準設定のショートカットキーよりもマクロに設定したショートカットキーの方が優先されます。頻繁に使うショートカットキー以外は上書きで設定しても問題ないでしょう。個人マクロブックにあるプロシージャにも、この方法でショートカットキーを登録できます。（なお、設定画面から削除すれば標準のショートカットキーが復活します）。
ちなみに、Ctrl+半角アルファベットのうち、元々アルファベットを使っている物だけで割り当てられていないのは「J」と「M」の2つだけだそうです。
※ただし、全員が共通で利用するマクロ有効ブックに、使用頻度の高いショートカットキー（例：Ctrl+C,Ctrl+V）を割り当てするのは、不意にマクロ実行されてしまい迷惑なのでやめましょう。

# 4.VBEエディタで、実行したいSubプロシージャの中にカーソルを置いてF5キー
使用頻度が月1〜2回程度と少なく、自分が管理しているプロシージャ数が多いなら、この方法がおすすめです。

![Microsoft Visual Basic for Applications - PERSONAL.XLSB - [Mod11_Name (コード)] 2024_11_03 15_40_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479442/57493de6-bf68-bb1d-cf41-6262f7fcd9a9.png)

ステップインで1行ずつ実行するならF8キーです。
ただし、大量にプロシージャがあるなら、用途別にモジュールを分けて、かつ、標準モジュールの名前を標準のもの（Module1、Module2、…）から変更しておくと良いです。例えば、標準モジュールの名前を「Mod03_Print」とかに変更して、中身に保存するプロシージャを用途・機能別に分類しておくと、Subプロシージャの中にカーソルを置いてF5キーの方法で実行する場合でも、特定のプロシージャの記載場所を思い出しやすいです。

# 5.リボンやクイックアクセスツールバーに登録する
個人マクロブックに保存している、使用頻度の高いマクロはリボンやクイックアクセスツールバーに登録しましょう。

![スクリーンショット 2024-10-23 225237.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479442/fd9873ac-bf00-2a7b-2c06-20a8423af32d.png)

詳しくは下記の記事で紹介しています。
[Qiita‐個人マクロブック等のプロシージャをリボンに登録して使う](https://qiita.com/nanashi0424/items/79ebe4bd13c55e832398)

なお、ここでいうリボンの設定は各ユーザーごとなので、マクロ有効ブックにあるプロシージャを他のユーザーにも使用してもらう用途では使えません。
また、マクロ有効ブックのマクロをリボンに登録すると、他のブックでは使いづらいです。「別ブック」を開くと、リボンは「ユーザー」内で共通なので、登録はされた状態になります。リボンからマクロを実行することもできますが、登録しているプロシージャのあるマクロブックが開かれてしまいます。

# 6.マクロ実行のショートカットキーをOnKeyで割り当てる
標準モジュールの先頭で、Option Private Moduleと記載してPrivate Module 設定している場合は、[マクロ]ダイアログのオプションからショートカットキーを登録できません。
その場合でもショートカットキーを登録したいときは、OnKey等でショートカットキーを登録することができます。また、OnKeyでの割り当ての場合には、マクロ一覧のオプションからとは違ってCtrl+又はCtrl+Shift+との組み合わせでなくとも、ショートカットキーを登録することができます。

```vb:VBA
Private Sub Workbook_Open()　
'例えば、個人マクロブック等のThisWorkBookに記載する。
   'ショートカットキー設定
   Application.OnKey "^+{K}", "sb画像の外枠線切替"  'CTRL+SHFT+Kで「画像の外枠線切替」を起動
   Application.OnKey "^+{D}", "sbデータ整形"  'CTRL+SHFT+Dで「"sbデータ整形」を起動
End Sub
```
※「Workbook_Open」
Openイベントとは、ブックを開いた時に発生するイベント。Openイベントが発生すると、ExcelがSubプロシージャ「Workbook_Open」を自動的に実行してくれます。よってSubプロシージャ「Workbook_Open」を作成することでブックを開いた時にマクロが自動実行されるようになります。
ここでは、Excelブックを起動する度に、ショートカットキーを登録する仕組みになっています。
ちなみに、OutlookVBAには、OnKeyに相当するものがありません。そのため、ショートカットキーでマクロ実行したければ、マクロをクイックアクセスツールバーに登録後に、Altキー+数字キーで呼び出すのがよいと思います。

# 7.マクロ有効ブックのリボンに登録する
これは他の方法と比べて難しいのであまりおすすめはしません。
しかし、1.のマクロボタンと同様に、他の方にもマクロ有効ブックやアドインとして共有する場合に便利な方法です。
マクロボタンは、マクロボタンを設置している特定シートをアクティブにした状態でないと実行できませんが、リボンに設置していれば、どのシートを見ていても実行できる点などが良いです。（その分、そのマクロ有効ブックのどのシートがアクティブになっていても、正しく実行できるように考慮する必要はあります。）

詳しい方法は他の方の記事ですが、下記の記事等をご参照ください。
[【Excel VBA】リボンの自作タブをアドインファイル(xlam)に埋め込む](https://qiita.com/mysoshake/items/fb5e9d439d09f84b0602)