目次
キーを押す
今回は VBA の SendKeys ステートメントのテストを行ってみたいと思います。
SendKeys ステートメントを使用すると、パソコンのキーボードのキーを押す操作を、 Excel のマクロから疑似的に行う事が出来るようです。
ご注意ください
私の場合、 SendKeys ステートメントを使用したマクロを実行する度に「NumLock」が OFF になってしまいます。
原因は不明ですが、「NumLock」キーを押すと ON に戻ったので、そのままにしています。
マクロの一例
下記のマクロを作成してみました。「1」キーを押した後に「ENTER」キーを押す内容になっています。
Sub SendKeysステートメントのテスト()
SendKeys "1{ENTER}", True
End Sub
ENTER など文字以外のキーは中かっこ {} で囲んで表現するようです。
2 つ目のパラメーターに「True」を指定すると、 SendKeys の処理が終わるまでマクロが待機してくれるようです。
マクロ実行時の条件
上記マクロをワークシートの「B2」セルを選択した状態で「Alt + F8」で実行してみます。
上記マクロを VBE のマクロ編集画面から実行すると、マクロの編集画面の文字入力カーソルがある位置に文字が出力されてしまいます。
Excel アプリの「ツール > オプション > 編集」の「入力後にセルを移動する」のチェックは「ON」、方向は「下」になっています。
文字の半角全角の入力モードは「半角」になっています。
実行結果
マクロを実行してみると、「B2」セルに「1」と入力されて、アクティブなセルが一つ下のセルに移動しました。
パソコンのキーボードで「1」キーを押して「ENTER」キーを押した時の結果と同じになっていますね。
Shift + F8
「Shift」キーと「F8」キーを同時に押すマクロも作成してみました。
エクセルのワークシート上で「Shift + F8」を押すと、現在のセルの選択範囲に新しい選択範囲を追加出来るようです。
{キーの名前 数字} と記述をすると「キーの名前」のキーを「数字」の回数分押した事になるようです。
Sub SendKeysでShitキーとF8キーを同時に押すテスト() Cells.Clear '現在のワークシートの全セルの内容消去 Cells(1, 1).Select 'A1 セルを選択 SendKeys "{DOWN 2}{RIGHT 1}", True 'B3 セルまで移動 SendKeys "+{DOWN 2}", True '「Shift+↓を2回」でB3:B5 を選択 SendKeys "1{TAB}2{TAB}3{TAB}", True 'B3:B5 に 1,2,3 を入力。3{TAB}でアクティブセルが B3 に移動する。 SendKeys "+{F8}", True '選択範囲を追加 SendKeys "{RIGHT 2}{DOWN}", True 'B3 から D4 セルまで移動 SendKeys "+{DOWN 2}", True '「Shift+↓を2回」で D4:D6 を選択 SendKeys "1{TAB}2{TAB}3{TAB}", True 'D4:D6 に 1,2,3 を入力。3{TAB}でアクティブセルが B3 に移動する。 SendKeys "+{F8}", True '選択範囲を追加 SendKeys "{DOWN 4}", True 'B3 から B7 セルに移動 SendKeys "+{DOWN 2}", True '「Shift+↓を2回」で B7:B9 を選択 SendKeys "1{TAB}2{TAB}3{TAB}", True 'B7:B9 に 1,2,3 を入力。3{TAB}でアクティブセルが B3 に移動する。 End Sub
上記マクロの実行結果は以下の画像のようになりました。
Ctrl + Shift + A
「Ctrl + Shift + A」のショートカットキーを押すテストも行ってみました。
まずは、「Excel > ツール > マクロ > 新しいマクロの記録」で
「CtrlとShiftとAのショートカットキーで呼び出されるマクロ」
という名前のマクロを「Ctrl + Shift + A」のショートカットキーで記録してみました。記録を開始して、直ぐに記録終了ボタンを押しました。
そうすると以下のマクロが自動的に作成されました。
Sub CtrlとShiftとAのショートカットキーで呼び出されるマクロ()
'
' CtrlとShiftとAのショートカットキーで呼び出されるマクロ Macro
'
' Keyboard Shortcut: Ctrl+Shift+A
'
End Sub
上記のマクロに以下の一文を追加しました。
MsgBox "「CtrlとShiftとAのショートカットキーで呼び出されるマクロ」が実行されました。"
一文追加後のマクロは以下のようになりました。このマクロを SendKeys で呼び出してみたいと思います。
Sub CtrlとShiftとAのショートカットキーで呼び出されるマクロ()
'
' CtrlとShiftとAのショートカットキーで呼び出されるマクロ Macro
'
' Keyboard Shortcut: Ctrl+Shift+A
'
MsgBox "「CtrlとShiftとAのショートカットキーで呼び出されるマクロ」が実行されました。"
End Sub
SendKeys で「Ctrl + Shift + A」のショートカットキーを押すマクロを作成してみました。「Ctrl」キーは ^ キャレットで表現するようです。
何かのキーを押しながら複数のキーを押す場合、 () で囲むようです。今回は「Ctrl」キーを押しながら「Shift+A」を押したいので、「^(+A)」としてみました。
Sub CtrlとShiftとAを同時に押すテスト()
'SendKeys "^+A", True
SendKeys "^(+A)", True
End Sub
上記マクロをワークシートから実行すると以下のメッセージが表示されました。「Ctrl + Shift + A」のショートカットキーが実行されたようです。
Sub 大文字ABCとかっこ入力()
SendKeys "+(ABC){ENTER}", True '大文字 ABC
SendKeys "+(89){ENTER}", True '()
SendKeys "{{}{}}{[}{]}{ENTER}", True '{}[]
End Sub
参考資料
- SendKeys ステートメント (VBA) | Microsoft Learn
- https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/sendkeys-statement
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。