Excelアドインのマクロに、ショートカットキーを割り当てる

2022年5月26日

Excelアドイン中のマクロをキーボードショートカットで実行したいことがあったので、その方法をまとめておきます。 要点は以下の2点でした。
  • マクロは標準モジュール内に書く
  • キーの割付けと解除の処理は ThisWorkbook 内に書く

標準モジュール

VisualBasic のメニューから 挿入標準モジュール として、Module1 を以下のように作成します(モジュール名は何でもOK)。
' 選択したセルの色塗り
'   「赤塗り」のセルは「塗りなし」に、「塗りなし」のセルは「赤塗り」になる
'   複数選択したときは、左上のセルの色が基準になる(と思う)
Private Sub NuriRed()
    If Selection Is Nothing Then Exit Sub

    with Selection.Intorior
        If .ColorIndex = 3 Then
            .ColorIndex = 0    ' 塗りなし
        Else
            .ColorIndex = 3    ' 赤
        End If
    End With
End Sub

ThisWorkbook

VisualBasic の画面左側、プロジェクトウインドウ中の Microsoft Excel Objects にある ThisWorkbook を以下のようにしておきます。
' 割り当て
Private Sub Workbook_Open()
    Application.OnKey "^a", "NuriRed"  ' [Ctrl]+[a]
'   Application.OnKey "+a", "NuriRed"  ' [Shift]+[a]
'   Application.OnKey "+^a", "NuriRed" ' [Shift]+[Ctrl]+[a]
End Sub

' 割り当て解除
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Application.OnKey "^a"   ' [Ctrl]+[a]
'   Application.OnKey "+a"   ' [Shift]+[a]
'   Application.OnKey "+^a"  ' [Shift]+[Ctrl]+[a]
End Sub
これは、ワークブックを開くと(アドインを有効にすると) [Ctrl]+[a] に上記マクロ NuriRed() を割り当てる処理です。 [Ctrl]+[a] は標準では全選択の機能ですが、この割り当てによって色塗り機能に変更されてしまいます。 割り当て解除の処理も書いとかないと、アドインを無効にしても [Ctrl]+[a] が全選択機能に戻らないので要注意です。 あとは xla 形式で保存して完了です。このアドインを登録&有効化すれば [Ctrl]+[a] の機能が切り替わります。 実用上は、別のキーに割り当てたほうが便利でしょう。

vb

Posted by plkl