デスクワークを超絶快適にするおすすめギアたち

Excelアドインをショートカットと右クリックメニューから呼び出す。

【当サイトはプロモーションを含んでいます】

Excelアドインを簡単に呼び出したい。

自作マクロを他のブックで使用する方法としてアドイン化する方法があります。

アドインはマクロ一覧から実行できません。

アドイン化したマクロはマクロ一覧に表示されません。なのでアドインのマクロを実行するには他のいくつかの方法を使います。

アドインを実行するいくつかの方法

「自作アドインの実行方法」をネットの検索結果を見てみると、一般的にクイックアクセスツールバーに登録して実行する方法が最も多いようです。

アドインは、クイックアクセスツールバー以外にも色々な実行方法があります。この記事では便利な3つの実行方法について紹介したいと思います!

今回紹介するアドインの実行方法!

  • クイックアクセスツールバーに登録して実行する。
  • 右クリックメニューに登録して実行する。
  • ショートカットキーを割り当てて実行する。
  • コマンドメニューから実行する。

アドインにショートカットを割り当てる。

ショートカット割り当てはMacroOptionsメソッドがおすすめ

ショートカット割当メソッド挙動
Application.OnKeyショートカット設定はExcelアプリ(Application)に保存される。
Application.MacroOptionsショートカット設定はファイル(book)に保存される。

マクロへショートカットを割り当てる方法としてApplication.OnKeyメソッドとApplication.MacroOptionsメソッドの2つ方法があります。

ネットで「アドイン ショートカット割り当て」というキーワードで検索してヒットした記事のほとんどがApplication.OnKeyを使っているようです。私はonkeyではなくApplication.MacroOptionsによるショートカット割り当てをオススメしたいです。理由は、Application.MacroOptionsは、Excelのアドインを有効にしている間だけショートカット設定が有効になるので扱いやすいと思うからです。

Application.OnKeyによるショートカット設定

Application.OnKeyのショートカット割り当てはExcelアプリケーションに保存されるため、アドインをオフにしてもショートカット設定がExcelに残ったままになります。アドインをオフにする時ってショートカット設定も消えて欲しいケースの方が多いと思うのですがファイルをすべて閉じてExcelを開きなおしてもショートカット設定が残ったままです。この状態でうっかりショートカットキーを押してしまうと警告画面が表示されます。ショートカット設定をリセットするにはApplication.OnKeyに空文字をセットしたコードを実行しなければなりません。

Application.MacroOptionsによるショートカット設定

一方、Application.MacroOptionsによるショートカット設定は、アドインをオフにするとリセットされます。Application.MacroOptionsによるショートカット設定はアドインブックに保存されるため、アドインをオフにすると裏でロードされていたアドインブック.xlamが閉じたことによりショートカット設定がリセットされるからです。

以上の理由で「アドインが有効になっているときだけ、ショートカットが有効になる」Application.MacroOptionsによるショートカット設定の方が使い勝手が良いかなと思います。

ショートカットを割り当てるコード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
'使い方
Application.MacroOptions Macro:="サブプロシージャ名", ShortcutKey:="D"
'例 ショートカットキーCtrl+Dを登録
Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="d"
'例 ショートカットキーCtrl+Shift+Dを登録
Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="D"
'使い方 Application.MacroOptions Macro:="サブプロシージャ名", ShortcutKey:="D" '例 ショートカットキーCtrl+Dを登録 Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="d" '例 ショートカットキーCtrl+Shift+Dを登録 Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="D"
'使い方
   Application.MacroOptions Macro:="サブプロシージャ名", ShortcutKey:="D"

'例 ショートカットキーCtrl+Dを登録
   Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="d"

'例 ショートカットキーCtrl+Shift+Dを登録
   Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="D"

アドインを右クリックメニューに登録する。

じょじお

右クリックメニューに登録する方法もあります。

Excelの右クリックメニュー

右クリックメニューは、ショートカットメニューやコンテキストメニューとも呼びます。

コード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
'使い方
With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
.Caption = "登録名"
.OnAction = "サブプロシージャ名"
End With
'記述例 ショートカットメニューの一番上に「(MyAddins)行を挿入(&I)」マクロを登録する。
With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
.Caption = "(MyAddins)行を挿入(&I)"
.OnAction = "MyAddins.xlam!Module1.RowsInsert"
End With
'使い方 With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True) .Caption = "登録名" .OnAction = "サブプロシージャ名" End With '記述例 ショートカットメニューの一番上に「(MyAddins)行を挿入(&I)」マクロを登録する。 With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True) .Caption = "(MyAddins)行を挿入(&I)" .OnAction = "MyAddins.xlam!Module1.RowsInsert" End With
'使い方
    With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
        .Caption = "登録名"
        .OnAction = "サブプロシージャ名"
    End With

'記述例 ショートカットメニューの一番上に「(MyAddins)行を挿入(&I)」マクロを登録する。
    With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
        .Caption = "(MyAddins)行を挿入(&I)"
        .OnAction = "MyAddins.xlam!Module1.RowsInsert"
    End With

ショートカットメニューにアクセスキーを割り当てるには、登録名(キャプション)に「マクロ(&I)」といったかたちで記述します。(&I)と記述すればキーボードIキーが割り当てられます。

アドインをメニューコマンドに登録する

じょじお

「アドイン」タブのメニューコマンドに登録する方法もあります。

Excelのメニューコマンド

コード

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
'使い方
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "メニュー名"
.OnAction = "サブプロシージャ名"
End With
'記述例
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "(MyAddins)行を挿入(&I)"
.OnAction = "MyAddins.xlam!Module1.RowsDel"
End With
'使い方 With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton) .Style = msoButtonCaption .Caption = "メニュー名" .OnAction = "サブプロシージャ名" End With '記述例 With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton) .Style = msoButtonCaption .Caption = "(MyAddins)行を挿入(&I)" .OnAction = "MyAddins.xlam!Module1.RowsDel" End With
'使い方
    With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
        .Style = msoButtonCaption
        .Caption = "メニュー名"
        .OnAction = "サブプロシージャ名"
    End With

'記述例
    With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
        .Style = msoButtonCaption
        .Caption = "(MyAddins)行を挿入(&I)"
        .OnAction = "MyAddins.xlam!Module1.RowsDel"
    End With

アドインを有効・無効にしたときのイベントを使おう

アドインはかんたんに有効・無効にできる点が良いところでもあります。ですのでアドインの有効・無効に合わせて、ショートカットや右クリックメニューへの登録と解除が連動して行えると便利です。

アドインのイベントには次の2つがあります。

Workbook_AddinInstall()アドインがオンになったときにトリガーする。
Workbook_AddinUninstall()アドインがオフになったときにトリガーする。
Excelアドインに関するイベント

このイベントを使えば、「アドインを有効化したら右クリックメニューにアドインメニューが登録され、アドインを無効化したら右クリックメニューからアドインメニューの表示が消える」といった挙動をとるコードが書けます。

Workbook_AddinInstall()イベント

アドインのマクロが記述されたブックに記述します。自分自身がアドインとして読み込まれた時にトリガーします。

Workbook_AddinUnInstall()イベント

アドインのマクロが記述されたブックに記述します。自分自身がアドインとしてアンロードされた時にトリガーします。

Workbook_AddinInstall()・Workbook_AddinUnInstall()の具体的なトリガーのタイミング

STEP
Excelの「開発」タブの「Excelアドイン」をクリック
STEP
アドインが表示されます。

▲上図のアドイン画面で操作した内容に合わせて下記の2つのどちらかのイベントがトリガーします。

アドインのチェックをオンにしてOKボタンを押す → 有効化したアドインブックのWorkbook_AddinInstall()がトリガーする。
アドインにチェックをオフにしてOKボタンを押す → 無効化したアドインブックのWorkbook_AddinUnInstall()がトリガーする。

サンプルコード

じょじお

ここまで学習した内容でサンプルコードを書いてみます。

サンプルコードの動作内容は、アドインが読み込まれた時にアドインに記述された2つのマクロ(行の挿入マクロ・行の削除マクロ)に対して以下の操作を行います。

アドインが読み込まれたら下記にマクロを登録する

  • ショートカット登録
  • コマンドメニュー登録
  • 右クリックメニュー登録
STEP
アドインファイルの標準モジュールModule1に書いたコード
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Option Explicit
Sub RowsDel()
Selection.EntireRow.Delete
End Sub
Sub RowsInsert()
Selection.EntireRow.Insert
End Sub
Option Explicit Sub RowsDel() Selection.EntireRow.Delete End Sub Sub RowsInsert() Selection.EntireRow.Insert End Sub
Option Explicit

Sub RowsDel()
    Selection.EntireRow.Delete
End Sub

Sub RowsInsert()
    Selection.EntireRow.Insert
End Sub

▲アドインファイルに適当に2つのマクロを書きました。

アクティブセルに行を挿入・削除するマクロです。実際によく使っています。

STEP
アドインファイルのThisWorkbookモジュールに書いたコード
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Option Explicit
Private Sub Workbook_AddinInstall()
'メニューコマンド リセット
'(既に登録済みの場合に登録してしまうと重複してしまうので念のため登録前にリセット。)
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を削除(&D)").Delete
Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を挿入(&I)").Delete
On Error GoTo 0
'メニューコマンド を追加① 行の削除マクロ
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "(MyAddins)行を削除(&D)"
.OnAction = "MyAddins.xlam!Module1.RowsDel"
End With
'メニューコマンド を追加② 行の挿入マクロ
With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
.Style = msoButtonCaption
.Caption = "(MyAddins)行を挿入(&I)"
.OnAction = "MyAddins.xlam!Module1.RowsDel"
End With
'右クリックメニューをリセット
'(既に登録済みの場合に登録してしまうと重複してしまうので念のため登録前にリセット。)
On Error Resume Next
Application.CommandBars("cell").Controls("(MyAddins)行を挿入(&I)").Delete
Application.CommandBars("cell").Controls("(MyAddins)行を削除(&D)").Delete
On Error GoTo 0
'右クリックメニューを追加① 行を挿入マクロ
With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
.Caption = "(MyAddins)行を挿入(&I)"
.OnAction = "MyAddins.xlam!Module1.RowsInsert"
End With
'右クリックメニューを追加② 行を削除マクロ
With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
.Caption = "(MyAddins)行を削除(&D)"
.OnAction = "MyAddins.xlam!Module1.RowsDel"
End With
'ショートカットキーの登録① 行の挿入
Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsInsert", ShortcutKey:="I"
'ショートカットキーの登録② 行の削除
Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="D"
End Sub
Private Sub Workbook_AddinUninstall()
On Error Resume Next
'右クリックメニューから削除① 行を挿入マクロ
Application.CommandBars("cell").Controls("(MyAddins)行を挿入(&I)").Delete
'右クリックメニューから削除② 行を削除マクロ
Application.CommandBars("cell").Controls("(MyAddins)行を削除(&D)").Delete
'コマンドメニューから削除① 行を挿入マクロ
Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を挿入(&I)").Delete
'コマンドメニューから削除② 行を削除マクロ
Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を削除(&D)").Delete
On Error GoTo 0
End Sub
Option Explicit Private Sub Workbook_AddinInstall() 'メニューコマンド リセット '(既に登録済みの場合に登録してしまうと重複してしまうので念のため登録前にリセット。) On Error Resume Next Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を削除(&D)").Delete Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を挿入(&I)").Delete On Error GoTo 0 'メニューコマンド を追加① 行の削除マクロ With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton) .Style = msoButtonCaption .Caption = "(MyAddins)行を削除(&D)" .OnAction = "MyAddins.xlam!Module1.RowsDel" End With 'メニューコマンド を追加② 行の挿入マクロ With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton) .Style = msoButtonCaption .Caption = "(MyAddins)行を挿入(&I)" .OnAction = "MyAddins.xlam!Module1.RowsDel" End With '右クリックメニューをリセット '(既に登録済みの場合に登録してしまうと重複してしまうので念のため登録前にリセット。) On Error Resume Next Application.CommandBars("cell").Controls("(MyAddins)行を挿入(&I)").Delete Application.CommandBars("cell").Controls("(MyAddins)行を削除(&D)").Delete On Error GoTo 0 '右クリックメニューを追加① 行を挿入マクロ With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True) .Caption = "(MyAddins)行を挿入(&I)" .OnAction = "MyAddins.xlam!Module1.RowsInsert" End With '右クリックメニューを追加② 行を削除マクロ With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True) .Caption = "(MyAddins)行を削除(&D)" .OnAction = "MyAddins.xlam!Module1.RowsDel" End With 'ショートカットキーの登録① 行の挿入 Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsInsert", ShortcutKey:="I" 'ショートカットキーの登録② 行の削除 Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="D" End Sub Private Sub Workbook_AddinUninstall() On Error Resume Next '右クリックメニューから削除① 行を挿入マクロ Application.CommandBars("cell").Controls("(MyAddins)行を挿入(&I)").Delete '右クリックメニューから削除② 行を削除マクロ Application.CommandBars("cell").Controls("(MyAddins)行を削除(&D)").Delete 'コマンドメニューから削除① 行を挿入マクロ Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を挿入(&I)").Delete 'コマンドメニューから削除② 行を削除マクロ Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を削除(&D)").Delete On Error GoTo 0 End Sub
Option Explicit
Private Sub Workbook_AddinInstall()
    'メニューコマンド リセット
    '(既に登録済みの場合に登録してしまうと重複してしまうので念のため登録前にリセット。)
    On Error Resume Next
    Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を削除(&D)").Delete
    Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を挿入(&I)").Delete
    On Error GoTo 0
    
    'メニューコマンド を追加① 行の削除マクロ
    With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
        .Style = msoButtonCaption
        .Caption = "(MyAddins)行を削除(&D)"
        .OnAction = "MyAddins.xlam!Module1.RowsDel"
    End With
    'メニューコマンド を追加② 行の挿入マクロ
    With Application.CommandBars("Worksheet Menu Bar").Controls.Add(Type:=msoControlButton)
        .Style = msoButtonCaption
        .Caption = "(MyAddins)行を挿入(&I)"
        .OnAction = "MyAddins.xlam!Module1.RowsDel"
    End With


    '右クリックメニューをリセット
    '(既に登録済みの場合に登録してしまうと重複してしまうので念のため登録前にリセット。)
    On Error Resume Next
    Application.CommandBars("cell").Controls("(MyAddins)行を挿入(&I)").Delete
    Application.CommandBars("cell").Controls("(MyAddins)行を削除(&D)").Delete
    On Error GoTo 0

    '右クリックメニューを追加① 行を挿入マクロ
    With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
        .Caption = "(MyAddins)行を挿入(&I)"
        .OnAction = "MyAddins.xlam!Module1.RowsInsert"
    End With
    '右クリックメニューを追加② 行を削除マクロ
    With Application.CommandBars("cell").Controls.Add(Before:=1, Temporary:=True)
        .Caption = "(MyAddins)行を削除(&D)"
        .OnAction = "MyAddins.xlam!Module1.RowsDel"
    End With
  
    'ショートカットキーの登録① 行の挿入
    Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsInsert", ShortcutKey:="I"
    'ショートカットキーの登録② 行の削除
    Application.MacroOptions Macro:="myAddins.xlam!Module1.RowsDel", ShortcutKey:="D"

  
End Sub


Private Sub Workbook_AddinUninstall()
    On Error Resume Next
    '右クリックメニューから削除① 行を挿入マクロ
    Application.CommandBars("cell").Controls("(MyAddins)行を挿入(&I)").Delete
    '右クリックメニューから削除② 行を削除マクロ
    Application.CommandBars("cell").Controls("(MyAddins)行を削除(&D)").Delete
    
    'コマンドメニューから削除① 行を挿入マクロ
    Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を挿入(&I)").Delete
    'コマンドメニューから削除② 行を削除マクロ
    Application.CommandBars("Worksheet Menu Bar").Controls("(MyAddins)行を削除(&D)").Delete
    On Error GoTo 0
End Sub

▲このコードはStep1で記述した2つのマクロをショートカットメニューなどに登録するマクロです。

まとめ

じょじお

アドインを便利に実行するためにショートカット登録などをする方法について紹介しました。

ぽこがみさま

このブログではRPA・ノーコードツール・VBA/GAS/Pythonを使った業務効率化などについて発信しています。
参考になりましたらブックマーク登録お願いします!

Excel時短・VBAのおすすめ書籍

Excel・Wordの基本的な使い方についての初心者向けの解説書です。かなり細かく丁寧に解説されています。著者の方のYouTubeチャンネルも併せて観るとより理解が深まるかと思います。

▲「Excel作業を自動化したいけどVBAはよくわからない・・・」という方でもPower Automate for Desktop(PAD)なら簡単に自動化できるかもしれません。PADは、Windows11にも公式搭載されたMicrosoftのRPAソフトウェアです。本書はPADでExcelなどのパソコン操作全般の自動化の基本がわかりやすく解説されています。

▲「Excel VBAの教科書」というとおりVBAの開き方から解説してるのですが網羅度が半端なくて満足感が高いです。(クラスモジュール・ユーザーフォーム・外部データ取り込み・JSON・Power Queryなど)。JSONやPower Queryは最近のExcelでの使用頻度高いかと思うので個人的にポイント高かったです。網羅度が高いゆえに分厚いです。個人的にVBA書でイチオシ。

お役に立てたらシェアお願いします!
  • URLをコピーしました!
  • URLをコピーしました!