目次

キーを押す

今回は VBA の SendKeys ステートメントのテストを行ってみたいと思います。

SendKeys ステートメントを使用すると、パソコンのキーボードのキーを押す操作を、 Excel のマクロから疑似的に行う事が出来るようです。

SendKeys ステートメントで「1」と入力してみました。
SendKeys ステートメントで「1」と入力してみました。

目次まで戻る

ご注意ください

私の場合、 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」セルを選択した状態でワークシートから「Alt+F8」で実行してみます。
「B2」セルを選択した状態でワークシートから「Alt+F8」で実行してみます。
Excel アプリの「ツール > オプション > 編集」の画面です。「入力後にセルを移動する」にチェックが入っています。方向は「下」になっています。「Enter」キーを押して文字の入力を確定すると下のセルに移動します。
Excel アプリの「ツール > オプション > 編集」の画面です。「入力後にセルを移動する」にチェックが入っています。方向は「下」になっています。「Enter」キーを押して文字の入力を確定すると下のセルに移動します。
文字の入力モードは「A」になっています。
文字の入力モードは「A」になっています。

目次まで戻る

実行結果

マクロを実行してみると、「B2」セルに「1」と入力されて、アクティブなセルが一つ下のセルに移動しました。

パソコンのキーボードで「1」キーを押して「ENTER」キーを押した時の結果と同じになっていますね。

マクロの実行結果です。 B2 セルに 1 と入力されています。
マクロの実行結果です。 B2 セルに 1 と入力されています。

目次まで戻る

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

上記マクロの実行結果は以下の画像のようになりました。

3 つのエリアが選択状態になっています。
3 つのエリアが選択状態になっています。

目次まで戻る

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」のショートカットキーが実行されたようです。

msgbox 関数が実行されました。
msgbox 関数が実行されました。
Sub 大文字ABCとかっこ入力()

SendKeys "+(ABC){ENTER}", True '大文字 ABC
SendKeys "+(89){ENTER}", True '()
SendKeys "{{}{}}{[}{]}{ENTER}", True '{}[]

End Sub
大文字の ABC , かっこ () , 中かっこ {} , 角かっこ [] が入力されています。
大文字の ABC , かっこ () , 中かっこ {} , 角(大)かっこ [] が入力されています。

目次まで戻る

参考資料

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

 

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿