Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

VBA

VBAでマウスを自動操作する方法~自動打鍵を目指して~

投稿日:2020年9月29日 更新日:

<目次>

(1) VBAでマウスを自動操作する方法
 (1-1) マウス操作のために利用する仕組み
 (1-2) 構文(HelloWorld)
 (1-3) サンプルプログラム

(1) VBAでマウスを自動操作する方法

当記事ではVBAを使ったマウス操作の基本と、サンプルプログラムや操作動画を紹介します。

(1-1) マウス操作のために利用する仕組み

マウス操作にはWindows APIとして提供されるUser32.dllライブラリの関数を利用します。具体的には次の2つの関数を利用します。

(表1)

Windows API名称 引数 説明
SetCursorPos (ByVal x As Long, ByVal y As Long) ・カーソル(マウスポインタ)を操作するためのAPIです。
・引数に画面上の座標(x,y)を引数で指定して、マウスポインタを移動させます。
・第一引数「x」は画面左端からのピクセル数です。
・第二引数「y」は画面上端からのピクセル数です。
mouse_event ( _
    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)
・マウスポインタの操作やボタン押下行うためのAPIです。
・第一引数(dwFlags)の数字を用いてマウスポインタの動作を指示します。
・例えば引数「2」はマウスの「左クリックを押す」という意味で、引数「4」はマウスの「左クリックを離す」という意味です。
・通常の感覚では「押す」と「離す」は1セットの動作に思えますが、ここでは区別がされています。
・第四引数(dwData)はマウスホイールの移動を行う場合のホイールの移動量を指定します。

(参考)Windows API
https://docs.microsoft.com/ja-jp/windows/win32/apiindex/windows-api-list?redirectedfrom=MSDN

(図111)

またmouse_eventの引数については次の種類があります。
(表2)

引数 パラメータ 機能
2 MOUSEEVENTF_LEFTDOWN マウス「左」ボタンDOWN(押した)
4 MOUSEEVENTF_LEFTUP マウス「左」ボタンUP(離した)
20 MOUSEEVENTF_MIDDLEDOWN マウス「中央」ボタンDOWN(押した)
40 MOUSEEVENTF_MIDDLEUP マウス「中央」ボタンUP(離した)
8 MOUSEEVENTF_RIGHTDOWN マウス「右」ボタンDOWN(押した)
10 MOUSEEVENTF_RIGHTUP マウス「右」ボタンUP(離した)
800 MOUSEEVENTF_WHEEL マウスホイール移動
(移動量は引数「dwData」で指定)

目次にもどる

(1-2) 構文(HelloWorld)

(1-2-1) SetCursorPos関数

SetCursorPos関数の構文です。これを実行するとマウスポインタが(100px,210px)の位置に移動します。

'SetCursorPos の定義
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

'マウスを(100px,210px)の位置に移動
Sub click()
    SetCursorPos 100, 210
End Sub

(1-2-2) mouse_event関数

mouse_event関数の構文です。これを実行するとマウスポインタが(100px,210px)の位置に移動した後にマウスをクリックします。

'SetCursorPos の定義
Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

'mouse_eventの定義
Declare 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 click2()
    'マウスを(100px,210px)の位置に移動
    SetCursorPos 100, 210    
    'マウスを左クリック(押す)
    mouse_event 2
    'マウスを左クリック(離す)
    mouse_event 4
End Sub

目次にもどる

(1-3) サンプルプログラム

サンプルプログラムを紹介します。このプログラム画面(JSP)にある4つのボタンを順番に押していくプログラムです。VBA側では現在の処理中ボタンや、次のボタン押下までのカウントダウンをおこないます。

(操作動画)完成品を操作したのが下記動画です

(図131)

(サンプルプログラム)

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 dwData As Long = 0, _
    Optional ByVal dwExtractInfo As Long = 0)
    

Sub click()
    Dim w As Worksheet
    Set w = ThisWorkbook.Worksheets("MOut")
    Dim i As Integer
    Dim wt As Integer: wt = 3
    
    '表示更新(★今ココ)
    w.Cells(16, 1).Value = ""
    w.Cells(4, 1).Value = "★今ココ"
    
    'JSP画面のボタン押下
    SetCursorPos 100, 210
    Application.Wait [Now() + "0:00:01.1"]
    mouse_event 2
    mouse_event 4
    
    'カウントダウン
    For i = 1 To wt
        w.Cells(6, 3).Value = (wt + 1) - i
        Application.Wait [Now() + "0:00:01.1"]
    Next
    
    '表示更新(★今ココ、秒数)
    w.Cells(6, 3).Value = ""
    w.Cells(4, 1).Value = ""
    w.Cells(8, 1).Value = "★今ココ"
    
    'JSP画面のボタン押下
    SetCursorPos 100, 395
    Application.Wait [Now() + "0:00:01.1"]
    mouse_event 2
    mouse_event 4
    
    'カウントダウン
    For i = 1 To wt
        w.Cells(10, 3).Value = (wt + 1) - i
        Application.Wait [Now() + "0:00:01.1"]
    Next
    
    '表示更新(★今ココ、秒数)
    w.Cells(10, 3).Value = ""
    w.Cells(8, 1).Value = ""
    w.Cells(12, 1).Value = "★今ココ"
    
    'JSP画面のボタン押下
    SetCursorPos 100, 575
    Application.Wait [Now() + "0:00:01.1"]
    mouse_event 2
    mouse_event 4
    
    'カウントダウン
    For i = 1 To wt
        w.Cells(14, 3).Value = (wt + 1) - i
        Application.Wait [Now() + "0:00:01.1"]
    Next
    w.Cells(14, 3).Value = ""
    
    '表示更新(★今ココ、秒数)
    w.Cells(12, 3).Value = ""
    w.Cells(12, 1).Value = ""
    w.Cells(16, 1).Value = "★今ココ"
    
    '画面ボタン押下
    SetCursorPos 100, 760
    Application.Wait [Now() + "0:00:01.1"]
    mouse_event 2
    mouse_event 4
        
End Sub

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-VBA

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

VBAで処理と処理の間に一定時間を空けて実行する方法

今回はVBAで処理と処理の間に一定時間を空けて実行する方法について、備忘も兼ねて記載します。 (0)目次&概説 (1) Application.wait (2) サンプルプログラムソース (3) サン …

VBAでcsvを読み込み区切り文字で区切る方法

  <目次> (1) VBAでcsvを読み込み区切り文字で区切る方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) サンプルプログラムの実行結果 (1) VBAでcsv …

VBAによる郵便番号の正規表現マッチ確認関数&置換関数の作成

  (0)目次&概説 (1) 正規表現とは (2) 正規表現はどのような場面で利用される? (3) VBAによる正規表現の簡易チェックツール  (3-1) 郵便番号を抽出したい  (3-2) …

VBAで画像を分類に応じて適切なフォルダに仕分けるプログラム

(0)目次&概説 (1) マクロ概要 (2) 使用方法 (3) アルゴリズム概要 (4) プログラム (1) マクロ概要 本マクロは画像ファイルを適切なフォルダに仕分けるためのマクロです。前提として、 …

VBAでフォルダを再帰的に検索する方法について

  <目次> (1) VBAでフォルダを再帰的に検索する方法について  (1-1) 構文  (1-2) サンプルプログラム (1) VBAでフォルダを再帰的に検索する方法について VBAでフ …

  • English (United States)
  • 日本語
Top