和風スパゲティのレシピ

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

Application.OnkeyとMacroOptionsの違い

Application.OnKeyメソッドと、
Application.MacroOptionsメソッドの違いを解説します。

同じところ

両者ともマクロにショートカットキーを設定するメソッドです。

以下のコードはどちらもCtrl+Jにマクロをセットします。

Application.Onkey "^J", "テストマクロ"
Application.MacroOptions "テストマクロ", ShortcutKey:="j"

違うところ

MacroOptionsは文字通り「マクロ オプション」の設定をするメソッドで、
このダイアログを手動で設定したときと同じ挙動になります。

マクロオプション


対してOnKeyメソッドはExcel自体にショートカットキーを設定するメソッドで、
その設定はExcelを開いている間だけの一時的なものになります。


両者には大きく分けて以下の3つの違いがあります。

設定を保存できるかどうか

MacroOptionsは上記の通りマクロオプションの設定であるため、
ブックの情報として保存することができます。

対してOnKeyメソッドは「実行してからExcelを閉じるまで」の設定のため、
一度Excelを閉じると再度実行しない限り復元されません。

閉じているブックに対しても有効かどうか

OnKeyメソッドはExcel自体に設定をするメソッドのため、
開いていないブックのショートカットキー設定も可能です。

その状態でショートカットキーを実行すれば、
そのブックを開いてマクロを実行しようとしてくれます。
(ブックが存在しなければエラー)


対してMacroOptionsはブックに保存された設定のため、
そのブックを閉じている場合は有効になりません。

ファンクションキーや特殊キーに設定できるかどうか

MacroOptionsは「Ctrl+○」「Ctrl+Shift+○」にしか設定できず、
○に入るのもアルファベットに限定
されます。


対してOnKeyメソッドはF1キーやInsertキー、Ctrl+Alt+○など、
ほぼすべてのキーに対してマクロを設定することが可能
です。

使い分け

OnKeyメソッドは「実行しないと有効にならない」性質があるため、
通常はMacroOptionsを使用して設定しておけばOKです。


OnKeyメソッドを用いる目的としては、以下のような例が挙げられます。

一時的に有効にしたいショートカットキーがある場合

例えばボタンを押してから再度ボタンを押す間など、
一時的にだけ有効な設定する場合はOnKeyを使用します。


これなら「矢印キーをボタン押下中だけ図形の移動に割り当てる」など、
主要なキーを上書きするショートカットが設定可能です。

ファンクションキーや特殊キーに設定したい場合

マクロオプションでは設定できないF1キーやInsertキー、
Ctrl+Alt+○やCtrl+1などに設定したい場合はOnkeyを使用します。

この場合、ブックを開いただけでは有効になりませんので、
Workbooks.Openイベントに記載するなどして、
自動で実行される仕組みを作って運用してください。