<スポンサーリンク>

VBAでマウスを操作する方法、座標の確認方法

この記事は約6分で読めます。
コピーボタン
記事のタイトルとURLをコピー
スポンサーリンク

VBAでマウスを操作する方法、座標の確認方法

<スポンサーリンク>

仕事でマウスを自動化し、業務改善をしましたので、
それをまとめてみました。

思った以上に簡単なので、是非使ってみていただいたらと思います。

マウス操作のおまじないを使って左クリックを行う。

マウスの自動化は、元々用意されている
「マウス操作のおまじない」をプログラム上部に書き込み、
そのおまじないを用いてマウス操作を自動化していきます。

さっそく、プログラムを見ていきましょう。(ダブルクリックでコピーできます)

01
02
03
04
05
06
07
08
09
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
'↓↓↓↓マウス操作のおまじない開始↓↓↓↓
Private Type Position
    x As Long
    y As Long
End Type
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
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)
Declare Function GetCursorPos Lib "user32" _
    (lpPoint As Position) As Long
     
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
'mouse_event用の定数宣言
Private Const MOUSEEVENTF_ABSOLUTE = &H8000
Private Const MOUSEEVENTF_MOVE = &H1
Private Const MOUSEEVENTF_LEFTDOWN = &H2
Private Const MOUSEEVENTF_LEFTUP = &H4
Private Const MOUSEEVENTF_RIGHTDOWN = &H8
Private Const MOUSEEVENTF_RIGHTUP = &H10
Private Const MOUSEEVENTF_MIDDLEDOWN = &H20
Private Const MOUSEEVENTF_MIDDLEUP = &H40
 
'Public Class Form1
    Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Integer, ByVal dwExtraInfo As Integer)
'↑↑↑↑マウス操作のおまじない終了↑↑↑↑
'↓↓↓↓ここからメインプログラム↓↓↓↓
 
Sub マウスクリック()
 
    SetCursorPos 900, 140 '左から900ピクセル、上から140ピクセルの位置にカーソルを移動
 
    Sleep 200
 
    mouse_event MOUSEEVENTF_LEFTDOWN  '左ボタン押下(範囲選択のクリックのつもり)
 
    mouse_event MOUSEEVENTF_LEFTUP  '左ボタン解放
 
 
End Sub

上記プログラムで実際に動作をしているのは、
↓ここからメインプログラム となっており、
・カーソルを移動 SetCursorPos 900, 140
・少し待って、Sleep 200
・左クリックを押し mouse_event MOUSEEVENTF_LEFTDOWN
・左クリックを話す mouse_event MOUSEEVENTF_LEFTUP
となっております。

同様におまじないを使うことで、
下記の通りマウスを操作することができます。

コードボタン動作
SetCursorPos x, yx,y座標に移動
mouse_event MOUSEEVENTF_LEFTDOWN左クリック押す
mouse_eventMOUSEEVENTF_LEFTUP左クリック離す
mouse_eventMOUSEEVENTF_RIGHTDOWN右クリック押す
mouse_eventMOUSEEVENTF_RIGHTUP右クリック離す
mouse_eventMOUSEEVENTF_MIDDLEDOWN中クリック押す
mouse_eventMOUSEEVENTF_MIDDLEUP中クリック離す

マウスの座標を確認

案外簡単にマウスの操作をできることが分かったと思いますが、
ここで躓くのが、マウスの座標を確認する方法です。

特に、人によってパソコンの画面サイズが違うと、
自分のパソコンではうまくいったのに、他の人のパソコンでは動作しない可能性があります。

その問題を解決するのが下記プログラムとなります。
マウスを左クリックした地点の座標を順番に5回とってくるようになっています。
(ダブルクリックでコピーできます)

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub 座標校正()
   
  Dim sht As Worksheet
   
  Sleep 500
   
  Const CN = 5
   
    Dim pos As Position
     
    i = 0
   
  Dim currentClickNum As Long
  Do While i < CN
    If GetAsyncKeyState(1) < 0 Then
      i = i + 1
    Call GetCursorPos(pos)
      Cells(i + 2, 3) = pos.x
      Cells(i + 2, 4) = pos.y
      Sleep 500
    End If
  Loop
   
End Sub

上位のプログラムでは、
・Do While i < max で、指定のクリック数までプログラムを繰り返し、
・GetAsyncKeyState(1)<0 で、マウスが押されたのを判断し、
・Call GetCursorPos(pos) で、座標を読み込み、セルに書き出しています。

この作業をまずおこない、各々のパソコンの画面に校正し、
下記の通り他のプログラムで、座標を読み込んであげることで、
どのパソコンでも同じ作業を覚えこますことができます。

1
SetCursorPos Worksheets("座標校正").Cells(2, 3).Value, Worksheets("座標校正").Cells(2, 4).Value

まとめ

マウスクリックは正直禁断の使い方ではありますが、
旧態依然としたシステムなどを扱っているものに関しては、
非常に有効な対策となります。

また、おじさんでも、やっていることがわかりやすい点から、
拒否反応なく、導入してもらうことができます。

是非使ってみてください。

コメント欄

<スポンサーリンク>
タイトルとURLをコピーしました