和風スパゲティのレシピ

日本語でコーディングするExcelVBA

OnKeyメソッドでショートカットキーを設定する

自作したマクロにショートカットキーを設定する場合、
マクロのオプション画面から設定する方法が簡単です。

マクロオプション

マクロオプションでの設定方法についてはこちらを参照ください。


本記事では、上記方法とは異なる設定方法である、
Application.Onkeyメソッドを使用する方法を解説します。

Onkeyメソッドでマクロにショートカットキーを設定する

基本構文

Application.Onkey 対象キー, マクロ名

サンプルコード

' Ctrl+J にマクロをセット
Application.OnKey "^j", "テストマクロ"

' 同名のマクロが複数ブックにある場合はブック名!を記載
Application.OnKey "^j", "Book1.xlsm!テストマクロ"

' ファンクションキーF1にマクロをセット
Application.OnKey "{F1}", "テストマクロ"

' Shift+J にマクロをセット
Application.OnKey "+j", "テストマクロ"

' Ctrl+J にセットしたマクロを解除
Application.OnKey "^j"

解説

Application.Onkeyメソッドを使用すると、
実行してからExcelを閉じるまでの間ショートカットキーを設定することができます。


この設定はどこにも保存されませんので、
一度Excelを閉じた場合は再度実行しない限りは復元されません。

常時設定するショートカットキーとして使用したい場合は、
Workbooks.Openなどに搭載して使用してください。


ちなみにこの設定はExcelの設定として記憶されるため、
設定したマクロを保存したブックを閉じても設定は残ります。

その状態でショートカットキーを実行した場合は、
対象ブックを開き、その上でマクロを実行してくれます。

Onkeyメソッド設定したショートカットキーを解除する

設定したショートカットを解除する場合は、
第2引数のマクロ名(プロシージャ名)を省略して実行します。

' Ctrl+J にセットしたマクロを解除
Application.OnKey "^j"

 

Ctrl、Shift、Altキーの組み合わせを設定する

Onkeyメソッドのメリットであり、注意すべき点でもある仕様として、
同時に押すCtrlキーも指定する必要があります。

サンプルコードにもある通り「^」がCtrlキーに該当し、
同様に「+」でShift「%」でAltの同時押しも設定することができます。

' Shift+J にマクロをセット
Application.OnKey "+j", "テストマクロ"

' Ctrl+Shift+J にマクロをセット
Application.OnKey "+j", "テストマクロ"

' Ctrl+Alt+J にマクロをセット
Application.OnKey "^%j", "テストマクロ"
対象キー 指定文字
Ctrl ^
Shift +
Alt %
command *

※ commandはMac限定。かつバージョンによっては動作しない場合あり。


この設定ができる点がマクロオプションより優れている点なのですが、
これを忘れると単キーにショートカットが設定されてしまうためご注意ください。

' ただの「J」にマクロがセットされてしまうため注意
Application.OnKey "j", "テストマクロ"

 

ファンクションキーなどの特殊キーにマクロをセットする

上記のサンプルコードでF1キーにマクロをセットしていたように、
OnKeyメソッドを使えばほぼすべてのキーにマクロをセットできます。

' ファンクションキーF1にマクロをセット
Application.OnKey "{F1}", "テストマクロ"

' Ctrl+F1にマクロをセット
Application.OnKey "^{F1}", "テストマクロ"

' INSERTキーにマクロをセット
Application.OnKey "{INSERT}", "テストマクロ"

' !注! CAPSLOCKキーにマクロをセットはできない
Application.OnKey "{CAPSLOCK}", "テストマクロ" ' ←エラーではないが反応なし

上記の通りCtrl+F1などの合わせ技も可能です。


INSERTキーなどの特殊キーにも設定することができますが、
CAPSLOCKなど設定できないキーもあるようです。

これはおそらくCAPSLOCKキーの制御がExcelではなくIMEにあるためで、
このように同時に開くアプリによって設定できないキーもあるためご注意ください。


また、Insert+Jなど、単キー同士の同時押し設定もできません。

' 以下は「アプリケーションまたはオブジェクト定義のエラー」となる
Application.OnKey "{INSERT}J", "テストマクロ"
Application.OnKey "AB", "テストマクロ"

同時押しのキーには専用のCtrl/Shift/Altを使用してください。


各キーを指定するためのの文字列リストはこちらを参照ください。

対象キー 指定文字
BackSpace {BACKSPACE} または {BS}
Break {BREAK}
CapsLock {CAPSLOCK}
Clear {CLEAR}
Delete または Del {DELETE} または {DEL}
End {END}
Enter (テンキー) {ENTER}
Enter ~
Esc { ESCAPE} または {ESC}
Help {HELP}
Home {HOME}
Ins {INSERT}
NumLock {NUMLOCK}
PageDown {PGDN}
PageUp {PGUP}
Return {RETURN}
ScrollLock {SCROLLLOCK}
Tab {TAB}
{UP}
{DOWN}
{LEFT}
{RIGHT}
F1 ~ F15 {F1} から {F15}