Excel VBA ステータスバーに文字を表示する方法と処理速度を遅くしない方法

ExcelVBA-基礎編

今回はExcelのステータスバーにメッセージ(文字)を表示させる方法をご説明します。

処理時間が長かったりループ回数が多い場合に、進捗状況を表示する方法のひとつです。

Application.StatusBar」で表示する事ができるため、簡単です。

また、ステータスバーにメッセージを表示する事で起こる注意点と回避方法もご紹介します

1.ステータスバーに表示する

ステータスバーとはExcelのSheet1などのシートの下の部分です。

ここに表示させたメッセージはそのマクロが実行終了しても消えません。

Sub Sample1()

    Application.StatusBar = "進捗状況"

End Sub

2.ステータスバーのメッセージを削除する

ステータスバーのメッセージは自動で消えませんので、次のように記述して削除します。

Sub Sample2()

    Application.StatusBar = False

End Sub

3.ステータスバーの注意点と回避方法

処理時間が長い処理などの進捗状況などを表示するために、ステータスバーを使用しますが、かえってその処理が処理時間を遅くすることになったりします。

また、処理が重くなりすぎると表示が停止して、ステータスバーの表示も停止することがあります。

例えば次のように、100,000回ループする処理でステータスバーに進捗状況を表示してみます。

Sub Sample3()

Dim i As Long
Dim a As Long

a = 1

For i = 1 To 100000

    Application.StatusBar = i & "回目の処理中:a=" & a
    
    a = a + 1

Next i

Application.StatusBar = False

End Sub

次の処理は「約50秒」かかりました。

ステータスバーをコメントアウトしてループすると計測できないくらい早くて「0秒」でした。

本来処理時間が長い処理に使用するのに、これでは本末転倒になります。

4.ステータスバーを使用しても処理時間を遅くしない方法

上記のようなコードでは非常に処理時間を長くする原因となってしまいました。

そこで、ステータスバーで進捗状況を確認しつつ、処理速度も極力遅くならないように、工夫してみたいと思います。

Sub Sample4()

Dim i As Long
Dim a As Long

a = 1

For i = 1 To 100000

    If i Mod 100 = 0 Then

        Application.StatusBar = i & "回目の処理中:a=" & a
        
    End If
    
    a = a + 1
        
Next i

Application.StatusBar = False

End Sub

If i Mod 100 = 0 Then」でループ回数の「i」が100で割り切れる回数の時のみ、ステータスバーにメッセージを表示させます。

100ごとに表示で「約0.8秒」でした。

1000に増やすと「約0.08秒」です。

多少遅くはなりますが、かなり処理時間を早められました。

もともと処理時間が短いサンプルで計測しましたが、もっと処理時間が長いコードであれば効果も非常に大きいかと思います。

タイトルとURLをコピーしました