VBAで画面上の座標を選択(マウス操作)するには、Windows API を使って マウスカーソルを移動 → クリック操作を実行する方法が主流です。
これは「VBAでの簡易RPA」の一種です。

✅ 基本手順
SetCursorPos
:マウスカーソルを座標に移動mouse_event
:クリックイベントを発生させる
🧪 実用サンプルコード(64bit VBA対応)
#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_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Sub 画面クリックテスト()
' ✅ マウスを X=500, Y=300 の位置に移動(画面左上が(0,0))
SetCursorPos 500, 300
' ✅ 左クリックをシミュレーション
mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
End Sub
✅ 座標の確認方法
Windows標準の方法では座標取得ができませんが、以下のようなツールで確認できます:
- マウス座標取得ツール
- Excelで
GetCursorPos
API を使って座標取得するマクロを作ることも可能です
⚠️ 注意点
項目 | 内容 |
---|---|
座標は画面全体基準 | デュアルモニタなどの場合は注意が必要 |
マウスが勝手に動く | 実行中に人が操作すると失敗する可能性 |
タイミングのズレ | Application.Wait などで遅延を入れると安定します |
Windowsの設定依存 | DPIスケーリングや拡大率によってズレることあり |
✅ 遅延を入れる例(実行の安定化)
Application.Wait Now + TimeValue("00:00:01") ' 1秒待つ
✅ 応用
- ボタンを順に押す
- 外部アプリやシステムに自動ログイン
- 定型業務の自動化(VBA+APIなしアプリへの対応)
🔧 さらに高度な自動化をしたい場合
手段 | 概要 |
---|---|
Power Automate Desktop | ノーコードでマウス座標を含めた自動化 |
AutoHotKey | 軽量かつ柔軟なRPAスクリプト(VBA連携可能) |
Python + PyAutoGUI | 高速・高精度なGUI操作自動化 |
✅ まとめ
SetCursorPos x, y
→ カーソル移動mouse_event
→ クリック発生- Windows API を使えば VBAでも画面上の位置を指定してクリックできます