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

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

定期的にこのボタンを自動でクリックし続けたい!

でも、どうしたらいいんだろう・・・プログラム?マクロ?な気がするけど難しそう。簡単にできる方法を知りたいよ!

 

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

一定間隔でマウスをクリックさせるには、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画面外のWindows自体や他のアプリケーションのボタンやブラウザ上のリンクをクリックすることも可能です。

要は、座標さえ合っていれば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内にこのコードが記載されいているので、自分自身を呼び出していることになります。

要するに、このコードは「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の時間に変更する必要があります。方法はいくつかありますが、難しくなるので今回は説明しません。

まとめ

長くなりましたが、数分で実装できちゃうのでまずはコピペして動かしてみてください。

そこから、座標や間隔を変更して目的の箇所をクリックさせましょう。失敗してもExcelを全て終了すれば自動クリックは停止しますので、何度か試して実現したいクリックを叶えてくださいね!では!

コメント

  1. やま より:

    以前、こちらを参照し、普通に動いてましたが、昨日より
    ボタンクリック後、「関数の挿入」ダイアログが出るようになってしまいました。
    VBA全くわからずなので、解消法あればお教えください。
    よろしくお願いします。

    • mMm より:

      やまさん

      活用いただいているようでありがとうございます!
      恐らくクリックしている一に関数の挿入ボタンが存在しているのではないかと思います。

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

      例えば、↑の350を500に変更するとどうでしょうか?
      一度お試しください。

      これでも改善しないようであれば、新たなExcelで再度コードを
      コピペしてみて改善するかお試しください。

  2. にしかわ より:

    ボタンを押したとき、特定の列に数字が表示されます。
    なお、カーソルは移動するのですが、クリックはされません。
    どうしたらクリックされますか?

  3. にしかわ より:

    すみませんこちらの勘違いでした。
    クリックされてます

  4. サバンナ より:

    手順通りに実装したのですがクリックされない状況です。
    ボタンを押したら、特定の列に数字(ランダムな時間?)が表示されます。
    どうすれば自動でクリックされるでしょうか?

    • mMm より:

      エラーが出ないようでしたら、クリックしたい箇所の座標を下記コード部分で調整いただけるとクリックされるかと思います。

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

      ※時間表示については↓がコード内に入っているため表示されていると思います。
      ‘解りやすいように秒を表示
      Range(“E10”) = Format(Now(), “mm:ss”)