ExcelのVBAで、処理を一時停止する、
Sleep関数やWaitメソッドをご紹介します。
目次
マクロ機能が有効なExcelブック「.xlsm」を作成
Excelブック「.xlsm」の作成方法が不明な場合は、下記の記事を参考にして下さい。
【エクセルVBA】マクロ機能が有効なExcelブック「.xlsm」の作り方
コードを標準モジュールに貼り付け
標準モジュールの開き方が不明な場合は、下記の記事を参考にして下さい。
【エクセルVBA】標準モジュールの開き方
標準モジュールを開いて、下記のコードを貼り付けて下さい。
コード
Sleep関数
Sleep関数はWindows APIです。
処理停止時間をミリ秒(1秒の1000分の1)単位で指定可能です。
Microsoft Officeが32ビットバージョンの場合は
モジュールの最初に、下記を記載して下さい。
※「mlsc」は変数なので、任意の文字列に変更して構いません。
1 |
Private Declare Sub Sleep Lib "kernel32" (ByVal mlsc As Long) |
32ビットバージョンのサンプルコードは下記です。
1 2 3 4 5 6 7 8 9 10 |
Private Declare Sub Sleep Lib "kernel32" (ByVal mlsc As Long) Sub Sample1() Dim time As Long time = 1000 Sleep time MsgBox time & "ミリ秒停止しました" End Sub |
Microsoft Officeが64ビットバージョンの場合は
モジュールの最初に、下記を記載して下さい。
※「mlsc」は変数なので、任意の文字列に変更して構いません。
32ビットバージョンと比較すると、「PtrSafe」部分を追記しています。
1 |
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal mlsc As Long) |
64ビットバージョンのサンプルコードは下記です。
1 2 3 4 5 6 7 8 9 10 |
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal mlsc As Long) Sub Sample1() Dim time As Long time = 1000 Sleep time MsgBox time & "ミリ秒停止しました" End Sub |
Waitメソッド
Waitメソッドは、引数で指定する時刻まで処理停止可能です。
Now関数で現在時刻を取得して、
TimeValue関数で値を加算した指定時刻まで処理を停止します。
現在時刻から1秒後まで処理停止する場合は、下記の様に記載します。
※「(“00:00:01”)」の数値を変更することで処理停止時刻を指定します。
1 |
Application.Wait Now() + TimeValue("00:00:01") |
サンプルコードは下記です。
1 2 3 4 5 6 7 8 |
Sub Sample2() Dim time time = TimeValue("00:00:01") Application.Wait Now() + time MsgBox time & "秒停止しました" End Sub |
Waitメソッド(ミリ秒単位で指定)
また、Sleep関数と同様に、処理停止時刻をミリ秒単位で指定する場合は、
下記の様に記載します。
※「1000」の数値を変更することで処理停止時刻を指定します。
1 |
Application.Wait [Now()] + 1000 / 86400000 |
※「86400000」は、1日をミリ秒に換算した値です。
1秒=1,000ミリ秒
1日=60秒×60分×24時間=86,400秒
86,400秒=86,400,000ミリ秒
サンプルコードは下記です。
1 2 3 4 5 6 7 8 |
Sub Sample3() Dim time As Long time = 1000 Application.Wait [Now()] + time / 86400000 MsgBox time & "ミリ秒停止しました" End Sub |
マクロを実行
上記で作成したマクロファイル(ここでは「処理を一時停止するVBA.xlsm」とファイル名を設定。)を準備します。
マクロファイルを開いて、「コンテンツの有効化」をクリックします。
※設定により、「コンテンツの有効化」は表示されない(クリック不要の)場合もあります。
「開発」タブをクリックします。
「マクロ」をクリックします。
マクロ「Sample1~3」のいずれかを選択、「実行」をクリックします。
実行結果:Sleep関数
「1000ミリ秒停止しました」と表示されます。
実行結果:Waitメソッド
「0:00:01秒停止しました」と表示されます。
実行結果:Waitメソッド(ミリ秒単位で指定)
「1000ミリ秒停止しました」と表示されます。
完了です。
参考サイト
Microsoft
Office 2010 の 32 ビット バージョンと 64 ビット バージョンとの互換性
https://docs.microsoft.com/ja-jp/previous-versions/office/ee691831(v=office.14)?redirectedfrom=MSDN