どうもマサヤです!
「定期的にこのボタンを自動でクリックさせたい!」
先日、このような悩みを相談されました。
一定間隔でマウスクリックさせる場合は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
【動画】コードの実装手順
一通りの手順を動画で確認してから、手順を一つずつ見ていきましょう。
実装手順を動画で!
動画の流れ通りに操作すれば導入できますよ!
手順を解説
では、手順を確認していきます。
といっても、画面を開いて、コードをコピペ、ボタンにマクロ設置といったシンプルな動きです。
1.VBEを起動
Excelを起動した状態で、「Alt + F11」でVBEを起動します。
2.標準モジュールを挿入
VBE画面内のプロジェクト画面上(左上)で右クリック⇒挿入⇒標準モジュールを選ぶ。
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 _ )
このコードはマウスを動かすためのおまじないと思いましょう。
左クリックさせるための関数を作成
実際の関数を作成してます。
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の時間に変更する必要があります。
方法はいくつかありますが、難しくなるので今回は説明しません。
まとめ
長くなりましたが、まずはコピペして動かしてみてください。
1分~数分で実装できます。
そこから、座標や間隔を変更して目的の箇所をクリックさせましょう。
失敗しても大丈夫です。
Excelを全て終了させて、もう一度やり直しましょう。
コメント
以前、こちらを参照し、普通に動いてましたが、昨日より
ボタンクリック後、「関数の挿入」ダイアログが出るようになってしまいました。
VBA全くわからずなので、解消法あればお教えください。
よろしくお願いします。
やまさん
活用いただいているようでありがとうございます!
恐らくクリックしている一に関数の挿入ボタンが存在しているのではないかと思います。
‘座標を設定。350はX軸(横方向) 270はY軸(縦方向)
SetCursorPos 350, 270
例えば、↑の350を500に変更するとどうでしょうか?
一度お試しください。
これでも改善しないようであれば、新たなExcelで再度コードを
コピペしてみて改善するかお試しください。
ボタンを押したとき、特定の列に数字が表示されます。
なお、カーソルは移動するのですが、クリックはされません。
どうしたらクリックされますか?
すみませんこちらの勘違いでした。
クリックされてます