VBAで待ち時間を作る方法!SLEEP・WAITを使う事例

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メソッドのそれぞれの記述方法を知っておくと心強いですね。

2 件のコメント

  • 宝くじの過去動画を取得するのに、1アクセス1秒以上でないとサイバー攻撃として扱われる可能性があるため、是非参考にさせて頂きます。
    因みに、URLを自動で変化させ、過去動画のURLを取得するためには、どうすればよいのでしょうか。
    ヘッダー情報を取得して、タイトルの有り無しで、動画の有無を判断すれば良いと考えていますが、具体的なコードが書けないでいます。ご教授頂けると大変助かります。

    • 石井芳則さん
      シモムギです。コメントありがとうございます。

      宝くじの過去動画というのがあまりよくわかっていないのですが、例えばNUMBERSの抽選会が以下URLで過去10回分を公開されているように、こういったサイトから動画URLを取得するといったイメージなのでしょうか。
      https://www.takarakuji-dream.jp/takarakuji/backnumber

      VBAでWeb関連の自動操作を行うのは、個人的にはハードルが高く、pythonの方が向いているのかなという気がしています。
      VBA or pythonのどちらを使うにしても、SeleniumというWeb関連の自動操作に長けたツールと組み合わせて使用するのが近道かもしれません。
      VBA向けにはSelenium BASICというものがあるようですので、(他サイトさんですが)参考URLを載せておきます。
      https://excel-ubara.com/excelvba4/EXCEL_VBA_401.html

      キーワードばかりで、具体的なアドバイスができず申し訳ありません。私ももう少し勉強してみます。

  • 石井 芳則 へ返信する コメントをキャンセル

    メールアドレスが公開されることはありません。 * が付いている欄は必須項目です