VBA マウスの操作

未分類

VBAでマウスを操作するには、Windows API を使って以下のような処理が可能です。

  • マウスカーソルを 画面上の任意の座標に移動
  • 左クリック/右クリックなどの マウスイベント を発生させる

✅ 基本構文(マウス操作に必要なAPI宣言)

64bit/32bit 両対応のコードはこちらです:

#If VBA7 Then
Private Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare PtrSafe Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal dwData As Long, ByVal dwExtraInfo As Long)
#Else
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, _
ByVal dx As Long, ByVal dy As Long, ByVal dwData As Long, ByVal dwExtraInfo As Long)
#End If

✅ マウスの操作種類(定数)

Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10

🧪 例①:マウスを座標に移動して左クリックする

Sub マウスを移動してクリック()

' マウスカーソルを (600, 400) の位置へ移動
SetCursorPos 600, 400

' 少し待つ(安定化)
Application.Wait Now + TimeValue("00:00:01")

' 左クリックをシミュレーション
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

End Sub

🧪 例②:右クリックする場合

vbコピーする編集するSub 右クリックする()

    SetCursorPos 500, 300
    Application.Wait Now + TimeValue("00:00:01")

    mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0

End Sub

🧪 例③:連続して2クリック(ダブルクリック風)

Sub ダブルクリック()

SetCursorPos 700, 500
Application.Wait Now + TimeValue("00:00:01")

' 1回目
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

Application.Wait Now + TimeValue("00:00:00.1") ' 0.1秒待機

' 2回目
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0

End Sub

✅ 注意点

注意点内容
座標は画面左上が (0,0)解像度に応じて位置を調整
実行中に人が操作すると失敗自動化処理に割り込まないよう注意
SendKeysとの併用は不安定アプリケーションの状態に依存する

✅ 補足:現在のカーソル座標を取得したい場合

別途 GetCursorPos API を使うことで、リアルタイムでマウス座標を取得できます。


✅ まとめ

処理方法
マウス移動SetCursorPos(x, y)
左クリックmouse_event + LEFTDOWN/UP
右クリックmouse_event + RIGHTDOWN/UP
遅延を入れるApplication.Wait
タイトルとURLをコピーしました