Excelのマクロを使ってRPAをする方法
本記事ではExcelのマクロを使ってRPAを行うためのコードを紹介していきます。
- 使用する関数の宣言
- カーソル位置を取得する
- カーソルの移動
- マウスのクリック操作
- キーボード操作
❶使用する関数の宣言
Windows APIを使ってRPAを行っていきます。
Windows APIとはWindowsOSの各機能(ウィンドウ、ファイル、ネットワーク接続、デバイスなど)へのアクセスや連携をさせているインターフェースです。
まずは、Windows APIをコントロールするための関数を「Option Explicit」で宣言していきます。この時、WindowsOSが64bitか32bitかでコードが違います。
GetCursorPos関数
GetCursorPos関数はカーソルの位置を確認するのに使用する関数になります
1 2 3 4 5 6 7 |
'【GetCursorPos関数】 '64bit Declare PtrSafe Function GetCursorPos Lib "User32" (lpPoint As coordinate) As Long '32bit Declare Function GetCursorPos Lib “User32” (lpPoint As coordinate) As Long |
この関数はX座標、Y座標が入る独自のデータ型を作る必要があります。
下記コードで変数「x」及び「y」を格納できるcoordinate型という独自のデータ型を作成できます。
1 2 3 4 5 6 |
' 座標「coordinate」のデータ型を定義 Type coordinate x As Long y As Long End Type |
SetCursorPos関数
SetCursorPos関数はカーソルを指定した位置に移動させるのに使用する関数になります。
1 2 3 4 5 6 7 |
'【SetCursorPos関数】 '64bit Declare PtrSafe Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As Long '32bit Declare Function SetCursorPos Lib “user32” (ByVal x As Long, ByVal y As Long) As Long |
mouse_event関数
mouse_event関数はマウスのクリック操作を行うのに使用する関数になります。
1 2 3 4 5 6 7 |
'【mouse_event関数】 '64bit Declare PtrSafe Sub mouse_event Lib "User32" (ByVal dwFlags As Long, Optional ByVal dx As Long = 0, Optional ByVal dy As Long = 0, Optional ByVal dwData As Long = 0, Optional ByVal dwExtractInfo As Long = 0) '32bit Declare Sub mouse_event Lib “user32” (ByVal dwFlags As Long, Optional ByVal dx As Long = 0, Optional ByVal dy As Long = 0, Optional ByVal dwDate As Long = 0, Optional ByVal dwExtractInfo As Long = 0) |
宣言部分のコードまとめ
各bitごとに宣言部分のコードを下記にまとめました。
自身のPCのOSを確認して、適したコードをコピペして使ってみてください。
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 27 28 29 30 31 32 33 |
'64bit '【GetCursorPosの宣言】(マウスポインター位置の取得) Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As coordinate) As Long '座標「coordinate」のデータ型を定義 X座標とY座標を格納できるようにする。 Type coordinate x As Long y As Long End Type '【SetCursorPos関数】 Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long '【mouse_event関数】 Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, Optional ByVal dx As Long = 0, Optional ByVal dy As Long = 0, Optional ByVal dwData As Long = 0, Optional ByVal dwExtractInfo As Long = 0) '32bit '【GetCursorPosの宣言】(マウスポインター位置の取得) Declare Function GetCursorPos Lib "user32" (lpPoint As coordinate) As Long '座標「coordinate」のデータ型を定義 X座標とY座標を格納できるようにする。 Type coordinate x As Long y As Long End Type '【SetCursorPos関数】 Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long '【mouse_event関数】 Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, Optional ByVal dx As Long = 0, Optional ByVal dy As Long = 0, Optional ByVal dwDate As Long = 0, Optional ByVal dwExtractInfo As Long = 0) |
➋カーソル位置を取得する
カーソル位置の取得はGetCursorPos関数を使います。
下記コードでカーソルの位置を取得することができます。
マクロのオプションでショートカットキーを設定しておくと便利です。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Pointer01() 'カーソル位置を取得するコード '「Pointer」をcoordinate型の変数として定義 Dim Pointer As coordinate 'GetCursorPos関数を呼び出し、カーソルの現在の位置情報をPointer変数に格納 GetCursorPos Pointer 'MsgBoxへマウスポインタの座標を出力 MsgBox "座標 X:" & Pointer.x & " Y:" & Pointer.y End Sub |
❸カーソルの移動
カーソル位置の移動はSetCursorPos関数を使います。
使い方は非常に簡単で下記のように「SetCursorPos」の後ろにカーソルの移動先の座標を「x」、「y」の順番で入れればOKです。
SetCursorPos x座標, y座標
カール移動は人間が行うよりも高速で実行されるためApplicationオブジェクトのWaitメソッドを使って要所的に処理待ちさせるとよいでしょう。
移動先の座標を調べる方法は先ほど紹介したGetCursorPos関数を使いましょう。
下記のコード例を実行するとディスプレイの4隅にカーソルを1秒間隔で順に移動させていくことができます。SetCursorPos関数の引数を変えることにより任意の箇所にカーソルを移動できます。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub move_cursor01() SetCursorPos 90, 200 Application.Wait Now() + TimeValue("00:00:01") SetCursorPos 90, 900 Application.Wait Now() + TimeValue("00:00:01") SetCursorPos 1800, 900 Application.Wait Now() + TimeValue("00:00:01") SetCursorPos 1800, 200 Application.Wait Now() + TimeValue("00:00:01") End Sub |
❹マウスのクリック操作
マウスのクリック操作はmouse_event関数を使います。
「mouse_event」の後ろ操作内容となる引数を入れることでマウスのクリック操作を行えます。
mouse_event 引数
操作内容 | 引数 |
左ボタンが押された | 2 |
左ボタンが離された | 4 |
右ボタンが押された | 8 |
右ボタンが離された | 10 |
中央ボタンが押された | 20 |
中央ボタンが離された | 40 |
下記コードは指定した座標で左クリックをし、SendKeysメソッドを使って文字を打ち込むコードです。クリックする座標をブラウザーの検索窓にすれば任意の言葉「今回はvba」を自動で検索できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub click_operation01() SetCursorPos 450, 520 Application.Wait Now() + TimeValue("00:00:01") mouse_event 2 'マウスの左クリック(押す) mouse_event 4 'マウスの左クリック(放す) Application.Wait Now() + TimeValue("00:00:01") SendKeys "(vba)", True Application.Wait Now() + TimeValue("00:00:01") SendKeys "{ENTER}", True End Sub |
❺キーボード操作
先の項目で使用したSendKeysメソッドは文字だけではなく「Enter」や「Ctrl」といった動作を表すキーも指定することができます。
動作を表すキーは下記の通りです。
キー | コード |
BackSpace | {BACKSPACE}、{BS}、または {BKSP} |
Break | {BREAK} |
CapsLock | {CAPSLOCK} |
Del または Delete | {DELETE} または {DEL} |
↑ | {UP} |
↓ | {DOWN} |
← | {LEFT} |
→ | {RIGHT} |
終了 | {END} |
Enter | {ENTER} または ~ |
Esc | {ESC} |
HELP | {HELP} |
ホーム | {HOME} |
Ins または Insert | {INSERT} または {INS} |
NumLock | {NUMLOCK} |
PageDown | {PGDN} |
PageUp | {PGUP} |
PrintScreen | {PRTSC} |
ScrollLock | {SCROLLLOCK} |
Tab | {TAB} |
Shift | + |
Ctrl | ^ |
Alt | % |
F1 | {F1} |
F2 | {F2} |
F3 | {F3} |
F4 | {F4} |
F5 | {F5} |
F6 | {F6} |
F7 | {F7} |
F8 | {F8} |
F9 | {F9} |
F10 | {F10} |
F11 | {F11} |
F12 | {F12} |
F13 | {F13} |
F14 | {F14} |
F15 | {F15} |
F16 | {F16} |