EXCEL VBA キーボードの操作・自動操作・操作方法・キー操作の自動化(SendKeysステートメント)
EXCEL VBA キーボードの操作・自動操作・操作方法・キー操作の自動化(SendKeysステートメント)
今回説明するのは、EXCEL VBAでキーボード操作を行うSendKeysステートメントの利用方法を説明いたします。キーボードから入力したかのように、キーボードの文字やエンターキー・CTRL+Cなども同時操作する事ができます。他のアプリケーションを操作するときや別のアプリケーションへデータを転記する時などに利用する事ができると思います。キーボード操作するには、操作対象がアクティブウィンドウ状態にする必要があります。それでは、サンプルプログラムを交えて順番に説明いたします。
●【EXCEL VBA マウスの操作・自動操作・操作方法・クリック・ダブルクリック・マウスポインターの位置指定、下記を参照して下さい】
●【SendKeysステートメントについては、下記を参照して下さい】(Microsoft社 様)】
https://docs.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/sendkeys-statement
● SendKeysステートメントを利用するには、下記の通りに設定を行います。
SendKeys string , [Wait]
String ・・・キーボード操作するキー「文字列式」を設定する。
Wait ・・・省略可能 Ture・・・処理が終了するまで実行を一時中断します。
False・・・プロシージャの終了を待たずに次の行に制御を移します。
既定値は、False
● キーボード操作するキー一覧
キー | コード |
---|---|
Windowsキー | ^{ESC} |
Enterキー(エンター) | {ENTER} または ~ |
BackSpaceキー | {BACKSPACE}、{BS}、または {BKSP} |
Breakキー | {BREAK} |
Del または Deleteキー | {DELETE} または {DEL} |
↑(上) | {UP} |
↓(下) | {DOWN} |
←(左) | {LEFT} |
→(右) | {RIGHT} |
Ins または Insertキー | {INSERT} または {INS} |
CapsLockキー(キャプスロック) | {CAPSLOCK} |
Endキー(終了) | {END} |
Escキー(エスケープ) | {ESC} |
ホームキー | {HOME} |
NumLockキー(ナムロック) | {NUMLOCK} |
PageDownキー(ページダウン) | {PGDN} |
PageUpキー(ページアップ) | {PGUP} |
PrintScreenキー(プリントスクリーン) | {PRTSC} |
ScrollLockキー(するロールキー) | {SCROLLLOCK} |
Tabキー(タブ) | {TAB} |
F1キー F2キー F3キー F4~16キー | {F1} {F2} {F3} 以降{4~16} |
● 組み合わせキーの一覧
キー | コード |
---|---|
Shiftキー(シフト) | + |
Ctrlキー(コントロール) | ^ |
Altキー(オルト) | % |
←「左」を10回押す | {LEFT 10} |
「A」キーを5回押す | {a 10} |
Ctrl+「C」キーを同時押し(コピー) | ^(c) |
Ctrl+「v」キーを同時押し(ペースト) | ^(v) |
Shiftキーを押しながら+「A」キー「B」キーを押す | +(ab) |
ABCと文字入力 | ABC |
変数と記号を入力 Iが変数と+を押す Iが変数の場合 | I & "{+} |
【使用例】
1 2 3 4 5 6 7 8 9 10 11 12 |
' ' Sub SendKeys00() SendKeys "Apple" '文字を入力「Apple」 SendKeys "{Left 4}", True '左矢印キーを4回押します SendKeys "^(c)", True 'CTRL+Cキーを押す End Sub ' |
【注意点】
① SendKeysステートメントを実行する際には、実際にキーボード操作する。画面を最前面にする必要があります。
例)EXCEL画面の指定したシート(Sheet1)のセル「A1」を選択
1 2 3 4 5 |
' ' ThisWorkbook.Worksheets("Sheet1").Activate 'ワークシート1をアクティブにします。 Range("A1").Select 'セルの「A1」を選択します。 ' |
② SendKeysステートメントを使用してアプリケーション等を操作する時に、アプリケーション起動までに、時間を要する時や処理に時間がかかる時は、プログラムを一時的に停止する処理を組み入れる必要があります。
例)プログラムを一時的に5秒停止する方法
1 2 3 4 |
' ' Application.Wait Now() + TimeSerial(0, 0, 5) '5秒一時停止します。 ' |
※TimeSerial(時,分,秒)で表しています。
EXCEL VBA キーボードの操作・キー操作の自動化(SendKeysステートメント)
下記のサンプルプログラムは、SendKeysステートメントを利用したキーボード操作を自動化する方法の説明をいたします。下記のサンプルプログラムは、セル「A1」に登録されている文字列をキーボード操作(SendKeysステートメント)でコピーしてカーソル移動して貼り付ける動作を自動化するサンプルプログラムです。
【プログラムの流れ】
① EXCELブックのワークシート(Sheet1)をアクティブにします。
② ワークシート(Sheet1)のセル「A1」を選択します。
③ セル「A1]に登録されている「この文字をコピーします。」をキーボード操作(Ctrl+C)でコピーします。
④ キーボード操作で↓矢印キーで2回押します。セル(A1)⇒(A3)へ移動
⑤ セル「A3」の位置に移動して、キーボード操作(Ctrl+V)でコピーした文字列を貼り付けます。
⑥ キーボード操作で↓矢印キーで2回押します。セル(A3)⇒(A5)へ移動
⑦ セル「A5」の位置に移動して、キーボード操作(Ctrl+V)でコピーした文字列を貼り付けます。
【プログラム実行条件】
・ワークシート「Sheet1」のセル「A1」に文字列を入力する。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● SendKeys01A(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
' ' Sub SendKeys01()'EXCELシートにキーボード操作にて文字列をコピー&貼り付けます。 ThisWorkbook.Worksheets("Sheet1").Activate 'ワークシート1をアクティブにします。 Range("A1").Select 'セルの「A1」を選択します。 SendKeys "^(c)", True 'セルの「A1」が選択されているので、コピーします。(CTRL+C) SendKeys "{DOWN 2}", True '下矢印キーを2回押します。 SendKeys "^(v)", True 'ペースト’セル「A1」でコピー内容を貼り付けます。 SendKeys "{DOWN 2}", True '下矢印キーを2回押します。 SendKeys "^(v)", True 'ペースト’セル「A1」でコピー内容を貼り付けます。 End Sub ' |
(画面クリックして拡大)
EXCEL VBA キーボードの操作・アプリケーションソフトの操作・電卓アプリの操作・キー操作の自動化(SendKeysステートメント)
下記のサンプルプログラムは、アプリケーションソフト(電卓アプリ)を起動して、SendKeysステートメントを利用してアプリを操作するサンプルプログラムです。SendKeysステートメントを利用する事で、ちょっとしたアプリ操作も行う事ができます。それでは、順番に説明いたします。
キー操作内容「 1+2+3+4+5+5+6+7+8+9+10 」と電卓アプリへキー入力しますので、結果55が計算されます。
【プログラムの流れ】
① Windowsの電卓アプリを起動させます。
② 電卓アプリが起動するまで、3秒間一時的にプログラムを停止します。
③ 電卓アプリへキー入力する数値(1~10)を繰り返します。
④ SendKeysステートメントでキー入力する数値と「+」を入力します。(キーボード操作)
⑤ キー入力後、1秒間プログラムを停止します。※1秒間隔をあける事で、アプリへのキー入力が正しく行えます。
⑥ 電卓アプリ加算する数値が10まで繰り返します。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● SendKeys01A(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
' ' Sub sendkeys02() '電卓アプリの操作 Dim I As Long Shell pathname:="CALC.EXE", windowstyle:=vbNormalFocus '電卓アプリを起動します。 Application.Wait Now() + TimeSerial(0, 0, 3) '3秒一時停止します。電卓アプリが起動するまで待ちます。 For I = 1 To 10 '数値の1~10まで加算します。 SendKeys I & "{+}", True ' 電卓アプリに数値(1~10)と+を入力します。(キーボード操作) Application.Wait Now() + TimeSerial(0, 0, 1) '1秒待ちます。(動作が早いため) Next I End Sub ' |
(画面クリックして拡大)
EXCEL VBA キーボードの操作・アプリケーションソフトの操作・メモ表アプリの操作・キー操作の自動化(SendKeysステートメント)
下記のサンプルプログラムは、アプリケーションソフト(メモ帳アプリ)を起動してSendKeysステートメントを利用してアプリを操作するサンプルプログラムです。SendKeysステートメントを利用する事で、様々なアプリ操作も行う事ができます。それでは、順番に説明いたします。
キー操作内容「 1,2,3,4,5,6,7,8,9,10・・・・100,」を順番にキー操作(自動)する事で、メモ帳アプリ数値が記入されました。
【プログラムの流れ】
① Windowsのメモ帳アプリを起動します。
② メモ帳アプリが起動するまで、3秒間一時的にプログラムを停止します。
③ メモ帳アプリへ数値を入力します。入力する数値は、1~100まで繰り返します。(縦10×横10の間隔で数値をメモ帳アプリへ転記します。)
④ SendKeysステートメントでキー入力する数値と「,」区切り文字としてカンマを入力します。
⑤ 入力する数値を加算+1します。
⑥ 数値を10回入力したら改行します。(キーボード操作:エンターキー)
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● SendKeys01A(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
' ' Sub SendKeys03() 'メモ帳アプリの操作 Dim I, L, N As Long Shell pathname:="Notepad.exe", windowstyle:=vbNormalFocus 'メモ帳アプリを開きます。 Application.Wait Now() + TimeSerial(0, 0, 3) '3秒一時停止します。メモ帳アプリが起動するまで待ちます。 N = 1 '1をセットします。(初期値) For I = 1 To 10 '10行分繰り返します。 For L = 1 To 10 '10回繰り返す。 SendKeys N, True 'N(1~100)の数値を順番にメモ帳へ転記します。(キーボード操作) SendKeys "," '数値の後にカンマ”,"を入力します。(キーボード操作) N = N + 1 'Nの数値を1加算します。 Next L SendKeys "{Enter}" 'メモ帳に数値の転記を10回繰り返したら改行(キーボード操作:エンター)します。 Next I End Sub ' |
(画面クリックして拡大)
EXCEL VBA キーボードの操作・アプリケーションソフトの操作・ペイントアプリの操作・キー操作の自動化(SendKeysステートメント)
下記のサンプルプログラムは、アプリケーションソフト(ペイントアプリ)を起動してSendKeysステートメントを利用してアプリを操作するサンプルプログラムです。今回は、EXCELにある表をコピーしたものをペイントアプリへ画像として貼り付けます。それでは、順番に説明いたします。
キー操作内容「 CTRL+V」・・選択範囲をコピーしたEXCEL表の内容をペイントアプリへ画像データとして貼り付けます。
【プログラムの流れ】
① EXCEL のワークシート「Sheet1」をアクティブにします。
② ワークシート「Sheet1」セル「D15」を起点にEXCELの表をコピーします。
③ Windowsのペイントアプリを起動します。
④ ペイントアプリが起動するまで、3秒間一時的にプログラムを停止します。
⑤ ペイントアプリを起動して、EXCELでコピーした表をペイントアプリへ貼り付けます。(キーボード操作:CTRL+V)
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● SendKeys01A(サンプルプログラム)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
' ' Sub SendKeys04() 'ペイントアプリの操作 With ThisWorkbook.Worksheets("Sheet1") .Activate 'ワークシート1をアクティブにします。 .Range("D15").CurrentRegion.Copy 'ワークシート1のセルD15を起点とする表を選択コピーします。 End With Shell pathname:="mspaint.exe", windowstyle:=vbNormalFocus 'ペイントアプリケーションを起動します。 Application.Wait Now() + TimeSerial(0, 0, 3) 'ペイントアプリケーションが起動するまで3秒まちます。 SendKeys "^(v)", True 'ペイントアプリケーションが起動して、EXCELの表を貼り付けます。(キーボード操作:CTRL+V) End Sub ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。