For NextステートメントやDo Loopステートメントなどで、非常に長い処理を行うと、CPUの使用率が100%近くに上昇することがあります。 長い処理が終わるまで、コーヒーでも飲んで休憩できればいいのですが、その間に、別のアプリケーションで別の仕事をしようとすると困ります。 マクロがCPUを独占してしまうので、場合によっては日本語変換さえ思うようにいかず、結局、マクロが終わるまで何もできない…などという事態になりかねません。 次のコードは、セルA1に1から1000000までの数値を代入します。 パソコンの環境によりますが、マクロが終了するまで、CPUの使用率は高くなります。Sub Sample() Dim i As Long Do i = i + 1 Range("A1") = i If i > 1000000 Then Exit Do Loop End SubVBAには、マクロが占有している制御をOSに開放するDoEvents関数があります。 こうした長い処理などで、ユーザーからのキー入力を受け取って、処理を途中で停止するときなどに使う関数です。 しかし、DoEvents関数を実行しても、CPUの使用率は下がりません。Sub Sample() Dim i As Long Do i = i + 1 Range("A1") = i If i > 1000000 Then Exit Do DoEvents Loop End Subこんなときは、Windows APIのSleep関数を使います。 Sleep関数は、指定した時間だけ処理を停止させる関数です。 引数には停止させる時間をミリ秒単位で指定します。Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub Sample() Dim i As Long Do i = i + 1 Range("A1") = i If i > 1000000 Then Exit Do Sleep 1 Loop End Sub「Sleep 1」は0.001秒だけ処理を停止させます。 わずかな時間ですが処理が停止するので、CPUの使用率が跳ね上がることはありません。