VBAで待ち時間を設けたいときってありますよね。
例えば、タイマーやアラームを作るとき。
その他、任意の時間でシートを切り替えれば、スライドショー的なものも作れます。
この記事では、「VBAで待ち時間を作る方法」について3つの事例を使って解説します。
1.SLEEP関数の使い方
こんにちは!エクセルマン・ブリーダーのしもむぎ(@re_znda13)です。
それではひとつめの事例から。
ここではSLEEP関数というものを使用してみましょう。
この関数はVBAの関数ではなく、Windows APIになります。
したがって、VBAで使用するにはおまじない的な次の1文を最初に記述する必要があります。
Private Declare Sub sleep Lib “kernel32” Alias “Sleep” (ByVal ms As Long)
これさえ書いてしまえば、あとは簡単です。以下のような記述で待ち時間を設けることができます。ひとつ、待ち時間はmsecの単位であることを注意しましょう。5secの待ち時間を作るときは5000とする必要があります。
sleep 待ち時間
これを使ったサンプルとして、5秒経ったらお知らせしてくれるVBAコードを紹介します。
Private Declare Sub sleep Lib "kernel32" Alias "Sleep" (ByVal ms As Long)
Sub タイマー()
Dim t, st, ft As Long
st = Timer
t = 5000
sleep t
ft = Timer
Application.StatusBar = "経過時間" & (ft - st) & "秒"
MsgBox t / 1000 & "秒待ちました"
Application.StatusBar = False
End Sub
2.WAITメソッドの基本的な使い方
次にふたつめの事例を紹介します。
ここで使うのはApplicationオブジェクトであるWAITメソッド。
基本的には以下のように記述して、任意の時刻になったら次の処理を行わせるときに使います。
Application.wait (時刻)
これを使ったサンプルとして、2時になったらお知らせしてくれるVBAコードを紹介します。
Sub アラーム()
Dim t As String
t = "2:00:00"
Application.wait t
MsgBox t & "になりました"
End Sub
3.WAITメソッドの応用的な使い方
最後の事例として、WAITメソッドの応用的な使い方を解説します。
前章によると、WAITメソッドでは時刻を指定するのでした。
SLEEP関数のような使い方はできないの?
答えは「可能」です。以下のようにNOW関数を使うのがポイントです。この記述では、現在より5秒あとの時刻になったら次の処理を行います。
Application.wait Now() + TimeValue(“00:00:05”)
これを使ったサンプルとして、エクセルのワークシートをスライドに見立てて、スライドショーのようにするVBAコードを紹介します。
Sub スライドショー()
For i = 1 To Sheets.Count
Sheets(i).Activate
Cells(1, 1).Select
Application.wait Now() + TimeValue("00:00:05")
Next i
End Sub
■書籍をお持ちの方■
こちらの書籍をお持ちの方は、Tips556 プロシージャの実行を待つというページにWAITメソッドの解説がされていますので、併せてご確認ください。
4.まとめ
この記事では、「VBAで待ち時間を作る方法」について解説しましたが、いかがでしたか?
SLEEP関数、WAITメソッドのそれぞれの記述方法を知っておくと心強いですね。