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でシートをループする方法について

  <目次> (1) VBAでシートをループする方法について  (1-1) 構文  (1-2) サンプルプログラム (1) VBAでシートをループする方法について VBAの処理でブック内の「 …

VBAでファイルやフォルダの存在チェックを行う方法

<目次> (1) VBAでファイルやフォルダの存在チェックを行う方法  (1-1) 構文  (1-2) サンプルプログラム (1) VBAでファイルやフォルダの存在チェックを行う方法 (1-1) 構文 …

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

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

VBAで複数のブックの内容を集計する方法

<目次> (1) VBAで複数のブックの内容を集計する方法  (1-1) 構文  (1-2) サンプルプログラム (1) VBAで複数のブックの内容を集計する方法 VBAで複数のブックに記載された内容 …

VBAで「実行時エラー ‘429’:ActiveXコンポーネントはオブジェクトを生成できません」が出た時の対処記録

  <目次> (1) VBAで「実行時エラー ‘429’:ActiveXコンポーネントはオブジェクトを生成できません」が出た時の対処記録  (1-1) 発生状況・エラーメッセージ  (1-2 …

  • English (United States)
  • 日本語
Top