VBA 定期的に自動でマウスクリックさせる方法【コピペで使える!】

この記事は約10分で読めます。

どうもマサヤです!

 

「定期的にこのボタンを自動でクリックさせたい!」

 

先日、このような悩みを相談されました。

一定間隔でマウスクリックさせる場合はVBAが必要になります。

VBAを触っている方なら比較的に簡単に実装できますが、私が相談を受けたのはVBAをほんのちょっとだけ知っている人からでした。

 

そこで、今日は出来るだけ簡単に実装出来る方法をご紹介します。

文字だけではイメージできないので動画でも併せて紹介しますね!

※32bit対応のコードも紹介します!

 

では、いきましょう!

 

 

スポンサーリンク

一定間隔でクリックさせるコード

 

最初に結論!ということで、実装コードを紹介します!

VBAを知っているぜ!というあなたはこちらをコピーして利用してください。

'マウスイベントを取得するための決まり文句的なもの
Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Declare PtrSafe 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 _
)

Sub clickMouseLeft() '指定したポイントへ左クリックを実行

'座標を設定。350はX軸(横方向) 270はY軸(縦方向)
SetCursorPos 350, 270

'左クリックの動作
mouse_event 2
mouse_event 4

'解りやすいように秒を表示
Range("E10") = Format(Now(), "mm:ss")

'3秒後に再度実行
Application.OnTime Now() + TimeValue("00:00:03"), "clickMouseLeft"

End Sub

 

 

【動画】コードの実装手順

 

一通りの手順を動画で確認してから、手順を一つずつ見ていきましょう。

実装手順を動画で!

 

動画の流れ通りに操作すれば導入できますよ!

※操作前にVBE(Alt+F11)を起動して、上のコードをコピー(Ctrl+C)しておきましょう。

VBAクリックコード実装動画

 

手順を解説

 

では、手順を確認していきます。

といっても、画面を開いて、コードをコピペ、ボタンにマクロ設置といったシンプルな動きです。

 

1.VBEを起動

 

Excelを起動した状態で、Alt + F11」でVBEを起動します。

 

2.標準モジュールを挿入

 

VBE画面内のプロジェクト画面上(左上)で右クリック⇒挿入⇒標準モジュールを選ぶ。

※プロジェクト画面が表示されていない場合は「Ctrl + R」で表示。

 

3.コードをコピペ

 

上に記載したコードをコピーし、標準モジュールにペーストする。

ペーストが完了したら、VBE画面は右上の×で閉じて、Excel画面に戻る。

 

4.ボタンにマクロを設置

 

適当にボタンを作成。

※ボタンの作成は、画面上部メニューの挿入⇒図形から作成。

作成したボタンを右クリック⇒マクロの登録⇒clickMouseLeftを選択⇒OK。

 

5.ボタンをクリックして動けば完成

 

ボタンをクリックしましょう。

マウスカーソルが勝手に動いて、クリックすれば完成です。

今回は解りやすくするため、Excel画面内をクリックしていますが、Excel画面外の他のアプリケーションのボタンやブラウザ上のリンクをクリックすることも可能です。

 

要は、座標さえ合っていればPCの画面内のどこでもクリックが可能です。

 

 

スポンサーリンク

コード解説

 

ここからはコードの解説をしていきます。

繰り返し時間を変更したい方法なども含めて解説していきます。

※理解しやすくするため、専門的や難しい箇所はあえて説明しません。

 

マウスイベントを取得

 

まずは下記コードで、WindowsAPIよりマウスの動きを制御モジュールを取得します。

'マウスイベントを取得するための決まり文句的なもの
Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long

Declare PtrSafe 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 _
)

 

このコードはマウスを動かすためのおまじないと思いましょう。

もし、ガッツリ知りたい場合はWindowsAPIで検索して調べてみてください。

 

左クリックさせるための関数を作成

 

実際の関数を作成してます。

Sub clickMouseLeft() '指定したポイントへ左クリックを実行

'座標を設定。350はX軸(横方向) 270はY軸(縦方向)
SetCursorPos 350, 270

'左クリックの動作
mouse_event 2
mouse_event 4

'解りやすいように秒を表示
Range("E10") = Format(Now(), "mm:ss")

'3秒後に再度実行
Application.OnTime Now() + TimeValue("00:00:03"), "clickMouseLeft"

End Sub

 

SetCursorPosでマウスを移動

 

SetCursorPosでマウスカーソル(矢印)を指定した座標まで移動できます。

SetCursorPos 0, 0

とすると、マウスカーソルが左上に移動します。

押したいボタンがどの座標にあるかを、数値を変更しながら確認してみてください。

 

mouse_eventで左クリック

 

mouse_eventでマウスを左クリックさせることができます。

mouse_event 2
mouse_event 4
mouse_event 2で、左クリックを押しこむ。
mouse_event 4で、左クリックを離す。
この2行が、手動で左クリックした動作と同じになります。

Application.OnTimeで定期実行

 

Application.OnTime Now() + TimeValue(“00:00:03”),  “clickMouseLeft”

 

赤文字の箇所で実行間隔を指定します。

このコードでは3秒間隔で実行することになってます。

30分間隔に変更する場合は下記のようにすればOKです。

Now() + TimeValue(“00:30:00”)

 

また、青文字のclickMouseLeftは、実行する関数を指定しています。

clickMouseLeft内にこのコードが記載されいているので、自分自身を呼び出していることになります。

 

要するにこの1行は、

「3秒後に自分自身を呼び出し、再度左クリックを行いなさい」

といった意味のコードになります。

 

 

スポンサーリンク

右クリックさせるには?

 

mouse_eventの数字を下記に変更すれば右クリックになります。

mouse_event 8
mouse_event 16
mouse_event 8で、右クリックを押しこむ。
mouse_event 16で、右クリックを離す。

 

 

OS 32bit対応版コード

 

上記コードは64bit OS用のコードのため、32bit OSで動かない可能性があります。

その場合、下記をお使いください。

'マウスイベントを取得するための決まり文句的なもの
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 _
)

Sub clickMouseLeft() '指定したポイントへ左クリックを実行

'座標を設定。350はX軸(横方向) 270はY軸(縦方向)
SetCursorPos 350, 270

'左クリックの動作
mouse_event 2
mouse_event 4

'解りやすいように秒を表示
Range("E10") = Format(Now(), "mm:ss")

'3秒後に再度実行
Application.OnTime Now() + TimeValue("00:00:03"), "clickMouseLeft"

End Sub

 

 

スポンサーリンク

定期実行を停止させる方法

 

「やった!自動でクリックできた!・・・あれ、どうやって止めるの?」

私もハマった、終了方法についてもしっかり紹介します。

起動している全てのExcelを終了

 

Excelを全て終了させることで、定期実行を終了させることできます。

コード実装したExcelだけ終了させても停止しませんので注意しましょう。

必ずPC内に起動しているExcelを全て終了させてください。

 

コードで停止

 

コードでも停止させることができますが、以外に難しいのでExcel終了がおススメです。

 

意図的に止める場合のコードは下記になります。

Application.OnTime Now() + TimeValue(“00:00:03”), “clickMouseLeft”, ,False

ただし、本コードをそのまま使っても停止させることができません。

 

Now() + TimeValue(“00:00:03”)

この部分を、直前に設定したOntimeの時間に変更する必要があります。

方法はいくつかありますが、難しくなるので今回は説明しません。

 

 

まとめ

 

長くなりましたが、まずはコピペして動かしてみてください。

1分~数分で実装できます。

 

そこから、座標や間隔を変更して目的の箇所をクリックさせましょう。

失敗しても大丈夫です。

Excelを全て終了させて、もう一度やり直しましょう。

 

 

コメント