
定期的にこのボタンを自動でクリックし続けたい!
でも、どうしたらいいんだろう・・・プログラム?マクロ?な気がするけど難しそう。簡単にできる方法を知りたいよ!
先日、このような悩みを相談されました。
一定間隔でマウスをクリックさせるには、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
【動画で解説】コードの実装手順
一通りの手順を動画で確認してから、手順を一つずつ見ていきましょう。
実装手順を動画で!
動画の流れ通りに操作すれば導入できますよ!
手順を解説
では、手順を確認していきます。といっても、画面を開いて、コードをコピペ、ボタンにマクロ設置といったシンプルな動きです。
1.VBEを起動
Excelを起動した状態で、「Alt + F11」でVBEを起動します。
2.標準モジュールを挿入
VBE画面内のプロジェクト画面上(左上)で右クリック⇒挿入⇒標準モジュールを選ぶ。
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 _ )
このコードはマウスを動かすためのおまじないと思いましょう。
左クリックさせるための関数を作成
実際の関数を作成してます。
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でマウスカーソル(矢印)を指定した座標まで移動できます。
とすると、マウスカーソルが左上に移動します。
mouse_eventで左クリック
mouse_eventでマウスを左クリックさせることができます。
mouse_event 4
Application.OnTimeで定期実行
赤文字の箇所で実行間隔を指定します。このコードでは3秒間隔で実行することになってます。
30分間隔に変更する場合は下記のようにすればOKです。
Now() + TimeValue(“00:30:00”)
また、青文字のclickMouseLeftは、実行する関数を指定しています。clickMouseLeft内にこのコードが記載されいているので、自分自身を呼び出していることになります。
要するに、このコードは「3秒後に自分自身を呼び出し、再度左クリックを行いなさい」といった意味になります。
右クリックさせるには?
mouse_eventの数字を下記に変更すれば右クリックになります。
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終了がおススメです。意図的に止める場合のコードは下記になります。
ただし、本コードをそのまま使っても停止させることができません。
Now() + TimeValue(“00:00:03”)
この部分を、直前に設定したOntimeの時間に変更する必要があります。方法はいくつかありますが、難しくなるので今回は説明しません。
まとめ
長くなりましたが、数分で実装できちゃうのでまずはコピペして動かしてみてください。
そこから、座標や間隔を変更して目的の箇所をクリックさせましょう。失敗してもExcelを全て終了すれば自動クリックは停止しますので、何度か試して実現したいクリックを叶えてくださいね!では!
コメント
以前、こちらを参照し、普通に動いてましたが、昨日より
ボタンクリック後、「関数の挿入」ダイアログが出るようになってしまいました。
VBA全くわからずなので、解消法あればお教えください。
よろしくお願いします。
やまさん
活用いただいているようでありがとうございます!
恐らくクリックしている一に関数の挿入ボタンが存在しているのではないかと思います。
‘座標を設定。350はX軸(横方向) 270はY軸(縦方向)
SetCursorPos 350, 270
例えば、↑の350を500に変更するとどうでしょうか?
一度お試しください。
これでも改善しないようであれば、新たなExcelで再度コードを
コピペしてみて改善するかお試しください。
ボタンを押したとき、特定の列に数字が表示されます。
なお、カーソルは移動するのですが、クリックはされません。
どうしたらクリックされますか?
すみませんこちらの勘違いでした。
クリックされてます
手順通りに実装したのですがクリックされない状況です。
ボタンを押したら、特定の列に数字(ランダムな時間?)が表示されます。
どうすれば自動でクリックされるでしょうか?
エラーが出ないようでしたら、クリックしたい箇所の座標を下記コード部分で調整いただけるとクリックされるかと思います。
‘座標を設定。350はX軸(横方向) 270はY軸(縦方向)
SetCursorPos 350, 270
※時間表示については↓がコード内に入っているため表示されていると思います。
‘解りやすいように秒を表示
Range(“E10”) = Format(Now(), “mm:ss”)