今回は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秒」です。
多少遅くはなりますが、かなり処理時間を早められました。
もともと処理時間が短いサンプルで計測しましたが、もっと処理時間が長いコードであれば効果も非常に大きいかと思います。