Excelでよく使うマクロがあるのに、毎回「開発」タブからボタンを探したり、マクロ一覧から選んで実行したりしていませんか。実はVBAのApplication.OnKeyメソッドを使えば、好きなキーの組み合わせに自分専用のショートカットキーを割り当てることができます。
この記事では、Application.OnKeyの基本的な使い方から、標準のショートカットキーを無効化する方法、Excel起動時に自動でショートカットを有効にする方法まで、実務でそのまま使えるコードを交えて解説します。
Application.OnKeyとは
Application.OnKeyは、特定のキー操作が行われたときに、指定したマクロを自動実行させるためのメソッドです。書式は以下の通りです。
Application.OnKey Key, Procedure
- Key:割り当てたいキーの組み合わせ(文字列で指定)
- Procedure:実行したいマクロ(プロシージャ)名。省略すると、そのキーは元の動作に戻ります
例えば、Ctrl + Shift + Sキーを押したときにSaveAsBackupというマクロを実行したい場合は、次のように書きます。
Sub RegisterShortcut()
Application.OnKey "^+S", "SaveAsBackup"
End Sub
Sub SaveAsBackup()
Dim wb As Workbook
Set wb = ThisWorkbook
wb.SaveCopyAs wb.Path & "\backup_" & Format(Now, "yyyymmdd_hhmmss") & ".xlsm"
MsgBox "バックアップを保存しました。", vbInformation
End Sub
RegisterShortcutを一度実行しておけば、以降Ctrl + Shift + Sを押すたびにSaveAsBackupマクロが実行され、日時付きのバックアップファイルが自動作成されます。
キー指定の書き方一覧
OnKeyのKey引数は、特殊なコード体系で指定します。よく使う組み合わせは以下の通りです。
| 修飾キー | 記号 |
|---|---|
| Shift | + |
| Ctrl | ^ |
| Alt | % |
ファンクションキーや特殊キーは、{F2}のように波かっこで囲んで指定します。
' Ctrl+Shift+S
Application.OnKey "^+S", "SaveAsBackup"
' Ctrl+Alt+R
Application.OnKey "^%R", "RefreshAllData"
' F9キー単独
Application.OnKey "{F9}", "RecalcAndNotify"
' Ctrl+F9
Application.OnKey "^{F9}", "RecalcAndNotify"
大文字・小文字は区別されるため、"^s"と"^S"は異なるキーとして扱われる点に注意してください(Shiftキーを別途指定しない限り、通常は小文字で問題なく動作します)。
標準のショートカットキーを無効化する
OnKeyはマクロを割り当てるだけでなく、Excel標準のショートカットキーを無効化する目的でも使えます。Procedure引数に空の文字列("")を指定すると、そのキーは何も起こらなくなります。
Sub DisableCtrlS()
' Ctrl+Sで保存できないようにする(保存は独自マクロでのみ許可したい場合など)
Application.OnKey "^s", ""
End Sub
この方法は、シート保護中に誤操作を防ぎたい場合や、特定の業務フローでは決まった手順でしか保存・印刷させたくない場合に有効です。ただし、ユーザーの利便性を大きく損なう可能性もあるため、使いどころは慎重に検討しましょう。
無効化・割り当てを元に戻す
Procedure引数を完全に省略すると、そのキーは元の標準動作に戻ります。空文字列(無効化)と省略(復元)の違いを混同しないよう注意してください。
Sub RestoreCtrlS()
' Ctrl+Sの動作を標準に戻す
Application.OnKey "^s"
End Sub
Excel起動時に自動でショートカットを登録する
毎回手動でマクロを実行してショートカットを登録するのは手間がかかります。ブックを開いたタイミングで自動登録し、閉じるタイミングで解除するようにしておくと便利です。ThisWorkbookモジュールに以下のコードを記述します。
Private Sub Workbook_Open()
Application.OnKey "^+S", "SaveAsBackup"
Application.OnKey "^%R", "RefreshAllData"
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
' 登録したショートカットを解除して標準動作に戻す
Application.OnKey "^+S"
Application.OnKey "^%R"
End Sub
Workbook_BeforeCloseでの解除を忘れると、他のブックを開いているときにも意図しないマクロが実行されてしまうことがあるため、必ずセットで実装してください。
実務での活用例
Application.OnKeyは、以下のような場面で特に効果を発揮します。
- 頻繁に使う集計・整形マクロに専用キーを割り当て、作業時間を短縮する
F5(ジャンプ)やCtrl+P(印刷)など、業務上使わせたくない標準機能を一時的に無効化する- 複数人で共有するテンプレートブックで、統一されたショートカット体系を提供する
特にVBAで作成した業務ツールを他部署へ配布する場合、独自ショートカットを用意しておくとユーザーの操作性が大きく向上します。
まとめ
Application.OnKeyを使うと、独自のショートカットキーの割り当てだけでなく、標準ショートカットの無効化・復元まで自由にコントロールできます。
- キー指定は
^(Ctrl)、+(Shift)、%(Alt)と{F2}のような波かっこ表記を組み合わせる - Procedure引数を空文字列にすると無効化、省略すると標準動作に復元される
Workbook_Openで登録、Workbook_BeforeCloseで解除をセットにするのが基本パターン
ぜひ自分の業務フローに合わせたショートカットキーを設計し、日々のExcel作業を効率化してみてください。


コメント