【VBA入門】Sleep関数(API)やWaitメソッドで処理を止める方法

Sleep関数って使っていますか?

VBAで処理を指定時間止める場合に使用します。

Sleep関数はVBAの関数ではなく、Windows APIの関数です。

VBAで指定した時間だけ処理を止める方法はSleep関数を使う以外にも、ApplicationオブジェクトのWaitメソッドを使う方法などがあります。

この記事では、指定した時間だけ処理を止める方法について

・VBAで処理を指定時間止めるには?
・Sleep関数の使い方
・Waitメソッドの使い方

という基本的な内容から、

・停止時間を実測比較してみよう

など応用的な内容についても解説していきます。

今回は指定した時間だけ処理を止める方法について、使い方をわかりやすく解説します!

VBAで処理を指定時間止めるには?

VBAで処理を指定時間止めるにはWindows APISleep関数を使うことが多いです。

Sleep関数は処理を止める時間をミリ秒(1秒の1000分の1)単位で指定することができます。

一方で、VBAではApplicationオブジェクトのWaitメソッドで時間を指定して処理を止めることもできます。

ただWaitメソッドは多くの方が秒単位でしか停止時間を指定できないと思われているようです。

しかし、実はWaitメソッドでもミリ秒単位で停止時間を指定する方法があります。

Waitメソッドでもミリ秒単位で停止する方法を知らないがために、みなさんWindows APIのSleep関数を使われているのではないでしょうか?

この記事では、Windows APIのSleep関数使い方とVBAのApplicationオブジェクトのWaitメソッドの使い方を詳しく解説し、それぞれの実際の停止時間を計測比較してみましょう。

Sleep関数の使い方

Windows APIのSleep関数を呼び出して使用するには、マクロのエディターの一番上に以下のように記述する必要があります。

Sleep関数の引数には停止する時間をミリ秒単位で指定します。

サンプルコードで確認しましょう。

実行結果:
sleep01

このサンプルコードを実行すると、long型変数timeで指定した時間だけ遅れてメッセージボックスが表示されます。

Waitメソッドの使い方

ApplicationオブジェクトのWaitメソッドを秒単位で指定する場合は、以下のように記述します。

Application.Waitメソッドは、引数で指定された時刻まで停止します。

Now関数で現在の時刻を取得し、それにTimeValue関数の値を加算することで、停止する時刻を指定します。

この例の場合、現在の時刻の1秒後を指定したことになります。

また、Waitメソッドをミリ秒単位で指定する場合は、以下のように記述します。

今度は引数内のNow関数を「[ ]」で囲っています。

こうすることでミリ秒単位で停止時間を指定することができます。

この例の場合、現在の時刻の500ミリ秒後を指定したことになります。

86400000という数字は1日をミリ秒に換算した値です。

サンプルコードで確認しましょう。

実行結果:
sleep01

ちなみに、Now関数やTimeValue関数の使い方については、こちらで詳しく解説していますので、ぜひ参考にしてくださいね。

【VBA入門】日付を扱う方法(取得、書式変換、比較、計算、チェック)
更新日 : 2019年4月21日

停止時間を実測比較してみよう

それではWindows APIのSleep関数とApplication.Waitメソッドで停止時間の精度を比較してみましょう。

停止時間は100ミリ秒で設定しています。

時間の取得にはWindows APIのGetTickCountを使用して、ミリ秒単位で取得します。

GetTickCountを使用するには、以下のように記述する必要があります。

以下のサンプルコードで比較します。

実行結果:
sleep02

このサンプルコードで確認した結果はこのようになりました。

停止時間を100ミリ秒で指定すると、どちらも多少の誤差が生じ精度は同じくらいです。

ちなみに停止時間を500ミリ秒で指定すると、どちらも計測結果は500ミリ秒となり、精度に差はありませんでした。

この結果から、Windows APIのSleep関数とApplication.Waitメソッドどちらを使っても構わないと言えるかと思います。

まとめ

ここでは、指定した時間だけ処理を止める方法について説明しました。

Windows APIのSleep関数は関数を呼び出す手間はかかりますが、ミリ秒単位で時間を指定できます。

Application.Waitメソッドは秒単位の指定以外にも、ミリ秒単位でも時間を指定できます。

停止時間の精度を実測比較しましたが、どちらも同じような精度でしたので、どちらを使っても構わないと言えます。

どちらか使いこなすことができるように、この記事を何度も参考にして下さいね!

Excel VBAを最短で習得したい方へ

元々ITリテラシーの高い方やプログラムの学び方がわかっている方であれば、この記事通りに進めていけば、Excel VBAを独学で習得することができるでしょう。

ただし、実際の学習期間中はつまづいている時間がほとんどです。

「なかなかやり遂げられ無い、挫折してしまった」
「時間が足りない」
「情報が少なくどう調べればいいかわからない」
「エラーを解決することができない」

このような悩みを抱えている方も少なく無いと思います。

  • もう挫折したくない
  • 本業と両立しながら、好きな時間で自分のペースで勉強を続けていきたい
  • 自分だけのカリキュラムで効率的に勉強したい
そんな方はお気軽に侍エンジニア塾までご相談ください。

お一人お一人に専属のインストラクターがつくので、より深くExcel VBAについて学習することできます。

まずは『無料体験レッスン』で、弊社のコンサルタントと一緒にあなた専用の学習方やカリキュラムを考えてみませんか?

Excel VBAならではの学習方法や、現役エンジニアから貴重なアドバイスを受けることができます。

詳しくは下の画像をクリックして弊社サービス内容をご確認ください。

cta2_vba2

非常識な結果を出す卒業生多数!

エンジニアキャリア戦略

人気記事セレクション

3000名以上来場の人気セミナーが開催決定

18歳で時給6000円だった侍エンジニア塾代表の木内より、『プログラミングで人生を変える』ための学習方法をお教えます。

0からプログラミングを習得し、フリーランスエンジニアになる方法プログラミング学習の効率を劇的に上げる学習メソッドを解説しますので、奮ってご参加ください。

  • 日付:4/20(土),4/27(土)
  • 時間:14:00〜17:35終了予定
  • 場所:当社 道玄坂オフィス
  • 住所:〒150-0043 東京都渋谷区道玄坂2丁目11-1 Gスクエア渋谷道玄坂 4F *Googleマップでは「東京都渋谷区道玄坂2丁目11-1」で検索してください。近隣にスクエア渋谷という別のビルがあるためご留意ください。
  • 参加費:無料
  • URL:https://seminar.sejuku.net/
詳しくは下の画像をクリックして弊社セミナー内容をご確認ください。

LINEで送る
Pocket

この記事が気に入ったら
いいね!をしてフォローしよう

最新情報をお届けします

書いた人

長野 透

長野 透

熊本在住のフリープログラマ兼ライターです。C/C++/C#、Java、Python、HTML/CSS、PHPを使ってプログラミングをしています。専門は画像処理で最近は機械学習、ディープラーニングにはまっています。幅広くやってきた経験を活かしてポイントをわかりやすくお伝えしようと思います。
お問合せはこちらでも受け付けています。
[email protected]