【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!
マクロにショートカットキーを設定する|Excel VBA |
マクロ記録では、記録を開始するときに、そのマクロにショートカットキーを設定できます。
そうではなく、すでに作成してあるプロシージャに、後からショートカットキーを設定するにはどうしたらいいでしょう。
標準モジュールに次のプロシージャが記述されていたとします。
Sub Sample1()
MsgBox "Hello"
End Sub
このSample1にショートカットキーを設定してみましょう。
プロシージャにショートカットキーを設定するには、ApplicationオブジェクトのMacroOptionsメソッドを使う方法と、ApplicationオブジェクトのOnKeyメソッドを使う方法があります。
MacroOptionsメソッドは[マクロオプション]ダイアログボックスで設定できる項目をマクロから操作するメソッドです。ちなみに[マクロオプション]ダイアログボックスは、マクロを選択して実行できる[マクロ]ダイアログボックスで[オプション]ボタンをクリックしたときに表示されるダイアログボックスです。
プロシージャ「Sample1」に[Ctrl]+[J]というショートカットキーを設定するには次のようにします。引数ShourcutKeyには小文字で「"j"」 と指定します。
Sub Sample2()
Application.MacroOptions Macro:="Sample1", ShortcutKey:="j"
End Sub
[Ctrl]+[Shift]+[J]のショートカットキーを設定するには、「ShortcutKey:="J"」のように大文字で指定します。
MacroOptionsメソッドで設定したショートカットキーはブックに記録されるので一度MacroOptionsメソッドでショートカットキーを設定しておけば、Sample1を記述しているブックを開くだけでショートカットキーが有効になります。
Excelに標準で設定されているショートカットキーと、同じキーをプロシージャに割り当てることも可能です。たとえば「ShortcutKey:="s"」とすれば、[Ctrl]+[S]を押すと、Excel標準の"上書き保存"ではなく、プロシージャSample1が実行されます。
設定したショートカットキーを解除するには、引数ShortcutKeyに長さ0の文字列「""」を指定します。
Sub Sample3()
Application.MacroOptions Macro:="Sample1", ShortcutKey:=""
End Sub
ApplicationオブジェクトのOnKeyメソッドは、指定したキーにプロシージャを登録できます。
MacroOptionsメソッドでは[Ctrl]キーか、[Ctrl]+[Shift]キーにしかプロシージャを登録できませんでしたが、OnKeyメソッドは、ほかにも[Alt]キーやファンクションキーなどにも設定が可能です。
[Ctrl]+[J]キーにSample1を設定するには次のように記述します。
Sub Sample4()
Application.OnKey "^j", "Sample1"
End Sub
OnKeyメソッドで設定したショートカットキーを解除するには次のようにします。
Sub Sample5()
Application.OnKey "^j"
End Sub
ファンクションキーの[F3]キーに設定するには、次のように記述します。キーの指定方法についての詳細はヘルプを参照してください。
Sub Sampl6()
Application.OnKey "{F3}", "Sample1"
End Sub
プロシージャにショートカットキーを設定するということでは、OnKeyメソッドとMacroOptionsメソッドでは同じ結果を得られます。
しかし、設定されたショートカットキーの挙動には違いがあります。
MacroOptionsメソッドで設定したショートカットキーは、ブックに依存します。
ショートカットキーを設定したプロシージャ(ここではSample1)が記述されているブックをExcel上で開いているときだけショートカットキーが有効になります。
ブックを閉じている状態では、ショートカットキーを押しても何も起きません。
一方のOnKeyメソッドはExcel自身の設定です。
シートカットキーを設定した後、Excelを終了するまでの間、そのショートカットキーが有効になります。そのプロシージャが記述されたブックを開いていない状態でショートカットキーを押したとしても、Excelはそのブックを開いて実行しようとします。