EXCEL VBA マウスの操作・自動操作・操作方法・クリック・ダブルクリック・マウスポインターの位置指定
EXCEL VBA マウスの操作・自動操作・操作方法・クリック・ダブルクリック・マウスポインターの位置指定
今回説明するのは、マウスの操作をVBA で行う方法を説明いたします。EXCEL VBAでマウス操作を使うには、「Windows API関数」を宣言する必要があります。また、API関数を宣言する際は、PC環境に応じて64Bitの場合と32Bitの場合では、宣言方法が異なるので下記を参照し、自身のPC環境により設定を行って下さい。
WindowsAPI(マウスを操作する各関数の使い方)
使用しているWindows/Officeの環境により、64Bit・32Bit用の下記に記載しているWindowsAPIを宣言する必要があります。
● SetCursorPos ・・・マウスを動かす・マウスのポインターの操作を行う。
1 2 3 4 5 6 7 |
' '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 ' |
● Mouseevent ・・・マウスをクリックする操作を行う。
1 2 3 4 5 6 7 8 |
' '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 dwDate As Long = 0, Optional ByVal dwExtraInfo 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 dwExtraInfo As Long = 0) ' |
● GetCursorPos ・・・マウスのポインターの位置を取得します。
1 2 3 4 5 6 7 |
' '64Bitの設定 Declare PtrSafe Function GetCursorPos Lib “user32” (lpPoint As coord) As Long '32Bitの設定 Declare Function GetCursorPos Lib “User32” (lpPoint As coord) As Long ' |
【使用例①】:マウスの位置を指定した座標に動かす。
● 下記の使用例は、マウス位置を変更するサンプルプログラムです。マウスポインター位置を画面位置の横100・縦200にマウスポインタを合わせます。そのあとに、横200・縦400の位置にマウスポインターを合わせます。
・ SetCursorPos 横, 縦
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' ' Option Explicit '【SetCursorPos宣言】 Declare PtrSafe Function SetCursorPos Lib "User32" (ByVal x As Long, ByVal y As Long) As Long Sub Mouse01() 'マウスポインターの移動 SetCursorPos 100, 200 'マウスポインターの座標を横100・縦200 MsgBox "マウスポインター位置X100・Y200" SetCursorPos 200, 400 'マウスポインターの座標を横200・縦400 MsgBox "マウスポインター位置X200・Y400" End Sub ' |
【使用例②】:マスクのボタンをクリックする動作。
● 下記の使用例は、マウスポインターの移動+マウスボタンのクリック(左)の押して放す動作を行うサンプルプログラムです。下記のプログラムは、画面サイズ(1920×1080)に合わせて作成しています。異なるサイズですと正常に動作しません。※正常に動作する場合は、Windowsボタンがクリックされメニューが表示されます。
引数 | パラメータ | 説明(内容) |
---|---|---|
2 | MOUSEEVENTF_LEFTDOWN | マウスの左ボタンを押す。 |
4 | MOUSEEVENTF_LEFTUP | マウスの左ボタンを放す。 |
8 | MOUSEEVENTF_RIGHTDOWN | マウスの右ボタンを押す。 |
10 | MOUSEEVENTF_RIGHTUP | マウスの右ボタンを放す。 |
20 | MOUSEEVENTF_MIDDLEDOWN | マウスの中央ボタンを押す。 |
40 | MOUSEEVENTF_MIDDLEUP | マウスの中央ボタンを放す。 |
・ mouse_event 引数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
' ' Option Explicit '【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) Sub Mouse02() 'マウスポインターの移動およびクリック SetCursorPos 10, 1060 mouse_event 2 'マウスの左クリック(押す) mouse_event 4 'マウスの左クリック(放す) End Sub ' |
【使用例③】:マウスポインターの位置を取得する。
● 下記の使用例は、マウスポインターの位置を取得するサンプルプログラムです。現在のマスポインターの位置を横(X)・縦(Y)で取得します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
' ' Option Explicit Type coordinate x As Long y As Long End Type Declare PtrSafe Function GetCursorPos Lib "User32" (lpPoint As coordinate) As Long 'SetCursorPos の宣言(マウスポインター位置の取得) Sub Pointer03() 'マウスポインター位置を取得するサンプルプログラム Dim Cur As coordinate GetCursorPos Cur MsgBox "座標の位置:(X)" & Cur.x & "(Y)" & Cur.y 'マウスポインターの位置を表示します。" End Sub ' |
●【実行前⇒実行後】
【注意点】
● 上記の宣言を行わないとマウス操作等は扱えなくなるので、必ずWindowsAPIの宣言を忘れに設定しましょう。
● 今回説明するサンプルプログラムでは、画面の解像度は全て1920×1080ベースで作成しております。
EXCEL VBA マウスの操作・マウスポインターの位置を自動記録
下記のサンプルプログラムは、マウスで操作したマウスポインター位置を自動記録するサンプルプログラムです。マウスの左クリックを押す事で、クリックした位置のマウスポインターの位置をX座標・Y座標ごとに順番に記録する事ができます。マウスポインターの座標位置を確認する時やマウス操作の自動化する際に位置を順番に記録する時に便利だと思います。それでは、順番に説明いたします。
【プログラムの説明】
※今回のプログラムでは、2つのプログラムが登録されており、1つ目のプログラムは、マウスポインターの位置をワークシートに記録するプログラムで、2つ目は記録したマウスポインターの位置をクリアーする2つのプログラムで構成されています。
①.マウスポインタ―の座標(X,Y)を自動登録するプログラム
②.マウスポインタ―の登録した座標をクリアーするプログラム
【プログラム実行条件】
● 下記のサンプルプログラムでは、画面の解像度はどの画面サイズでも実行できます。
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
' ' Option Explicit Type coordinate x As Long y As Long End Type Declare PtrSafe Function GetCursorPos Lib "User32" (lpPoint As coordinate) As Long 'SetCursorPos の宣言(マウスポインター位置の取得) Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long) 'Sleepの宣言(指定した時間実行を一時停止)’ Declare PtrSafe Function GetAsyncKeyState Lib "User32.dll" (ByVal vKey As Long) As Long 'GetAsyncKeyStateの宣言(マウスクリックを検出) Sub Pointer() 'マウスポインター位置を取得するサンプルプログラム① Dim Cur As coordinate Dim l As Long l = 2 Do Until GetAsyncKeyState(27) <> 0 'ESCキーでプログラム終了 GetCursorPos Cur Application.StatusBar = Cur.x & " " & Cur.y 'ステータスバーにマウスポインターの座標をひょゆじします。 If GetAsyncKeyState(vbKeyLButton) <> 0 Then 'マウスの左クリックした時に下記実行(マウスポインターの位置を取得) Cells(l, "A") = Cur.x 'A列のセルにマウスポイントX座標を転記します。 Cells(l, "B") = Cur.y 'B列のセルにマウスポイントY座標を転記します。 l = l + 1 '行の位置を加算する Sleep 200 '処理を一時停止 End If DoEvents 'イベントを処理できるように実行を明け渡します。 Loop Application.StatusBar = False 'ステータスバーの設定を戻します。 MsgBox "プログラムを停止します。" End Sub ' ' ' Sub Pointer_Clear() '記録したマウスポインターの情報位置をクリアー② Dim Retmsg As Integer Dim lRow As Long Retmsg = MsgBox("記録情報をクリアーしますか?", vbYesNo) 'クリアーメッセージを表示します。 If Retmsg = vbYes Then 'Yesをクリックした場合。 lRow = Cells(Rows.Count, "A").End(xlUp).Row + 1 'A列の最終行+1を取得します。(登録データの最終行) Range("A2:B" & lRow).ClearContents ' End If End Sub ' ' |
(画面クリックして拡大)
EXCEL VBA マウスの操作・マウスポインターの位置を自動記録したデータを元に自動的にマウス操作します。
下記のサンプルプログラムは、サンプル①で作成したマウスポインターの位置を記録したデータを元に自動的にマウス操作するサンプルプログラムです。簡易RPAとまではなりませんが、マウス操作を自動化して他のアプリを操作する事もできます。EXCEL VBAから特定の画面位置をクリックする時などには、とても便利だと思います。それでは、サンプルプログラムを交えて順番に説明いたします。
【プログラムの説明】
※今回のプログラムでは、3つのプログラムが登録されており、①マウスポインターの位置をワークシートに記録するプログラムで、②記録したマウスポインターの位置をクリアーするプログラム、③記録したマウスポインターの位置を順番に実行する3つのプログラムで構成されています。新たに3つ目のプログラムは、記録したマウス座標位置に対して、マウスポインター位置を合わせてマウスの左ボタンを1クリックします。
★【サンプルプログラム】
下記のリンク先よりサンプルプログラムをダウンロードする事ができます。
● マウスポインター①記録・実行
マウスポインター記録・実行(ダウンロード)
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 |
' ' Option Explicit Declare PtrSafe Function SetCursorPos Lib "User32" (ByVal X As Long, ByVal Y As Long) As Long '【SetCursorPosの宣言】 Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As Long) 'Sleepの宣言(指定した時間実行を一時停止) 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) '【mouse_eventの宣言】 Sub Pointer_Run() '記録したマウスポインター位置を元にマウスを自動操作するサンプルプログラム③ Dim X, Y, I, lRow As Long lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得します。 For I = 2 To lRow ' X = Cells(I, "A") '記録したマウンポインターのX座標を取得します。 Y = Cells(I, "B") '記録したマウンポインターのY座標を取得します。 SetCursorPos X, Y '取得したX,Y座標をマウス位置に合わせます。 Sleep 200 mouse_event 2 'マウスの左クリック(押す) Sleep 30 mouse_event 4 'マウスの左クリック(放す) Sleep 30 Next I End Sub ' ' |
(画面クリックして拡大)
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。