VBA(マクロ)でマウスのクリックを自動操作(マウスふるふるみたいなイメージ)してリモートワークをサボる方法について紹介していきます
リモートワークの課題
仕事のできる優秀な読者の方々なら、上司からの作業依頼くらいすぐに終わってしまします。
そんな時はゆっくり休んで英気を養うことで作業効率が大幅に上がることは容易に想像できるものです
ですが、会社から貸与されている業務PCは監視が厳しく、PCを放置してスリープ状態が続くと『作業をしていないのではないか?』とメンドクサイ上司に目を付けられることになり、ゆっくりと英気を養うことができません。
そのため、疲弊して作業効率は下がり無駄に長い時間拘束されることになります。
主な業務PCの煩わしい設定やルール
- Teamsなどのステータスによる監視
- スリープ設定をごく短い時間に設定されている(変更するとすぐバレる)
- フリーソフトのインストールの禁止(マウスふるふる等)
- 外部のインターネット(Google、IE)には接続不可
Excelがインストールされていれば解決
Excelで利用できるVBA(マクロ)というプログラミング言語とWindows APIを利用して前述した課題はすべて解決することができます。
VBA(マクロ)なんて聞いたことない人でも安心してください。
コードの解説も簡単にしていますが、コピペで利用いただければ問題ありません。
そうすることで自動操作を簡単に行うことができ、マウスのカーソルを決まった時間に動かすことができるようになります。
ただし、VBA(マクロ)を利用するには設定が必要となります。
簡単にできるので、Excelの初期設定については下記を参照してください。
VBA(マクロ)でマウスを自動操作する方法
VBAの利用設定ができているのであれば実際にコードを紹介していきます。
下記をコピペしていただければ利用することが可能です。コードの右上にマウスカーソルを合わせるとコピーボタンが出ますのですぐに利用したい方はこちらからコピーをしてください。
VBAの自動操作のコード
Option Explicit
'マクロの実行時間を格納する変数を宣言
Private next_time As String
'マウス操作を行うためのAPIを宣言
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 mouseClick()
'マウスを(100px,210px)の位置に移動 SetCursorPos APIの呼び出し
SetCursorPos 100, 210
'左クリックの押下 宣言したmouse_event APIの呼び出し
mouse_event 2
'左クリックを離す 宣言したmouse_event APIの呼び出し
mouse_event 4
'タイマーを実行する時間をセット 今回は3分後に指定
next_time = Now() + TimeValue("00:03:00")
'設定した時間後に再度実行
Application.OnTime EarliestTime:=next_time, Procedure:="mouseClick"
End Sub
'mouseClick()プロシージャを停止させる記述
Sub stopMacro()
Application.OnTime next_time, Procedure:="mouseClick", Schedule:=False
End Sub
機能紹介
今回のマウス自動操作のツールは二つのプロシージャからできています。
ツール構成
- マウスを自動で操作するメイン機能のmouseClick()プロシージャ
- 上記のマクロを停止させるstopMacro()プロシージャ
メイン機能のプロシージャだけでは無限ループとなり停止させるのが面倒です。ですので、必ず停止させるマクロも実装するようにしてください。
できること
- 指定した時間にマウス操作を実行
- 指定した座標にマウスのカーソルを移動
- 右クリックを行う
PCやツールによってスリープ状態や離席中などのステータスに代わる時間は異なります。
そのため、設定する時間を任意で選択することができます。
また、カーソルの位置も任意で行うことができますが、誤った操作が怖い方はExcelを開いてそのページをひたすらクリックするようにしておきましょう。
クリックされる箇所にカーソルが動いているはずなのでその下にExcelファイルを置いておけば大丈夫です。
これで自動でカーソルを動かし続けることができます。
コードの貼り付け方法
タスクバーの開発からVisual Basicを選択する

新しいウィンドウが開いたら挿入から標準モジュールを選択する

下記のように文字を入力できる状態になったら、コードをコピペして保存する

コードをコピペしたらこんな感じ

Excelにボタンを設置してVBAを起動させても良いですし、上記の画像の挿入の下あたりにある再生ボタンを押しても良いです。
あとはファイルを閉じない限りは最小化などで非アクティブ化をしていても処理は実行されます。
シート側にボタンを設置してマクロを設定する

記述したコードはVBE側で直接操作することもできますが、ツールとして利用していくにあたってはボタンを設置しておくと便利になります。
画像の通りにボタンを設置して自動操作を開始するボタンと停止のボタンを設置します。

設置方法はExcelのタスクバーから『①開発』を選択します。
Excelのタスクバーに『開発』がない方は、初期設定ができていないと思いますので下記の記事を参照して設定をするようにしてください。
『②挿入』から一番左上の『③ボタン(フォームコントロール)』を選択します。

ボタンを設置したら『マクロの登録』というウィンドウが開くので設定したいマクロを選択して『OK』を押します。
今回は例として『自動操作を開始』ボタンを選択して、『mouseClick』マクロを登録している手順となりますコードの解説(アレンジしたい人のために)
一応の解説を紹介していきます。
今回、利用するWindows APIは以下の二つです。
- SetCursorPos
- mouse_event
SetCursorPosの使い方
マウスのカーソル(マウスポインター)を指定した場所に移動させるAPIです。
宣言の方法
Declare PtrSafe Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
VBA側で用意されている既存のAPIなので使用者で書き換える必要はありません。そのまま定型文としてコードの一番上部にて宣言しましょう。
呼び出し方
Subプロシージャ内でAPI名を指定することで呼び出して利用することができます
SetCursorPos X軸:水平位置を指定, Y軸:垂直方向を指定
X軸の指定とY軸の指定の間に区切り文字としてカンマを入れることを忘れないようにしましょう。
mouse_eventの使い方と引数の種類
マウスの操作を行うことができるAPIです。
宣言の方法
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 _
)
こちらもVBA側で用意されている既存のAPIなので使用者で書き換える必要はありません。少し長いですが、そのまま定型文としてコードの一番上部にて宣言しましょう。
呼び出し方
Subプロシージャ内でAPI名を指定することで呼び出して利用することができます
mouse_event 引数
mouse_eventの引数
引数は下記記だけではなくほかにも多数ありますが、特に利用頻度の高いものを記載いたしました。
| 引数 | 動作 | パラメータ |
| 2 | マウスの左クリック(押下) | MOUSEEVENTF_LEFTDOWN |
| 4 | マウスの左クリック(離す) | MOUSEEVENTF_LEFTUP |
| 8 | マウスの右クリック(押下) | MOUSEEVENTF_RIGHTDOWN |
| 10 | マウス右クリック(離す) | MOUSEEVENTF_RIGHTUP |
| 20 | マウス中央ボタンクリック(押下) | MOUSEEVENTF_MIDDLEDOWN |
| 40 | マウス中央ボタンクリック(離す) | MOUSEEVENTF_MIDDLEUP |
mouse_eventではボタンをクリックする動作を二つに分けています。例えば上記の表で右クリックをしたいとすると引数8、10を二つ指定する必要があります。
そうすることで初めてクリックという一つの動作を行うことができるようになります。
Application.OnTime の使い方と注意点
Application.OnTime は現在時刻から指定した時間が経過した時点で指定したプロシージャを自動で実行することができます。
'タイマーを実行する時間をセット 今回は3分後に指定
next_time = Now() + TimeValue("00:03:00")
'設定した時間後に再度実行
Application.OnTime EarliestTime:=next_time, Procedure:="プロシージャ名"
Now() ・・・現在時刻の取得
TimeValue(“00:03:00”) ・・・何分後に実行するかを指定する
OnTime・・・指定した時間にマクロを実行するメソッド
| 引数 | 省略の可否 | 説明 |
| EarliestTime | 省略不可 | マクロを実行する時刻を指定します |
| Procedure | 省略不可 | 指定した時刻に実行するプロシージャを指定します |
| Schedule | 省略可 | OnTimeメソッドの実行の可否をTrue/falseで指定します。 |
| LatestTime | 省略可 | 指定した時刻に別のマクロが起動していると、OnTimeで設定したマクロは動作しません。そのような場合に引数LatestTimeで指定した時間だけ待機して再度実行を行います。 |
マウスの自動操作を停止するプロシージャ
マウスを自動操作させるmouseClickプロシージャを停止させるためのマクロです。
上記で設定したOntimeメソッドの引数Scheduleにfalseを与えて処理を停止させます。
Sub stopMacro() Application.OnTime next_time, Procedure:="mouseClick", Schedule:=False End Sub
Application.OnTimeは指定した時間にプロシージャを実行してくれる便利な機能ではありますが、マウスを自動操作させる記述は無限ループです。
使用する際には上記の停止マクロや繰り返す回数で処理を停止させる記述を実装してループを抜けれらる処理を用意しておきましょう。
処理を実行する時間以外は基本的に動作は停止しているのでマクロの停止などでも止まらないので注意してください。
これで皆様の在宅ワークがより快適になること間違いありません。
空いた時間は家事や副業などの自由時間として過ごしましょう!!


