ショートカットキーの登録は、次のステートメントで簡単に行えます。
Application.MacroOptions macro := macroName, ShortcutKey := key
key はコントロールキーと一緒に押し下げるキー、macroName はその時に実行されるマクロの名前(いずれも文字列)です。ここで設定するショートカットキーは、ブックに記録されます。
MacroOption ではなく、同じ Application オブジェクトの Onkey メソッドでも同じことができます。こちらは、コントロールキーだけでなく、Shift キー、Alt キーおよびその組み合わせに対応しているほか、文字だけでなくファンクションキーやエンターキーなどほとんどのキーを利用できること、ショートカットキーが Excel 本体に記録されて他のブックにも効果を及ぼすこと、といった違いがあります。
Application.Onkey Key := key, Procedure := macroName
ここでは、MacroOptions を使って複数のショートカットキーを登録するマクロを紹介します。ブックを開いたときに登録し、念のため閉めるときに解除するようにしてあります。
ワークシート ThisWorkBook
'----- ブックが開いた際のイベント処理
Private Sub Workbook_Open()
'ショートカットキーを登録する
ShortCutKeys = True
End Sub
'----- ブックが閉じる際のイベント処理
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'ショートカットキーを解除する
ShortCutKeys = False
End Sub
標準モジュール ShortCutModule
'========== ショートカットキーの定義 ' ^q:Q_Macro を実行 ' ^w:W_Macro を実行 Public Const KeyDefinitions = "q, Q_Macro; w, W_Macro"
'========== ショートカットキーによる実行マクロ Public Sub Q_Macro() MsgBox "Q_Macro を実行" End Sub Public Sub W_Macro() MsgBox "W_Macro を実行" End Sub
'********************* これより上は、別のモジュールに入れておくと '********************* 使いやすいと思います
'========== ショートカットキーの登録/解除 'sw = True で登録、False で解除 Public Property Let ShortCutKeys(sw) Dim couples, couple, key, macroName '定義を読み取り couples = Split(KeyDefinitions, ";") '組み合わせごとに For Each couple In couples 'キーとマクロに分割して key = Trim(Left(couple, InStr(1, couple, ",") - 1)) macroName = Trim(Mid(couple, InStr(1, couple, ",") + 1)) 'まず既設定のマクロを解除して clearShortCutKey macroName 'sw=True なら新たにキーにマクロを設定する If sw Then putShortCutKey key, macroName Next End Property
'ショートカットキーの登録/解除 Private Sub putShortCutKey(key, macroName) Application.MacroOptions macro:=macroName, ShortcutKey:=key End Sub Private Sub clearShortCutKey(macroName) Application.MacroOptions macro:=macroName, ShortcutKey:="" End Sub
keyDefinitions には、";" で区切って複数の組み合わせを記載できます。
単純なマクロですが、こういうのをパーツとして用意しておくと、あとあと助かります。
ショートカットキーによる実行マクロは、いずれも Public でなくてはいけないことに注意してください。