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 |