残りの人生は~シラフで~

断酒をした事で生まれたシラフの時間に、思う事を書いていきます

VBA StatusBarで処理の進捗表示

VBAでの処理状況をユーザへ伝える手段のひとつとして、

StatusBarを使ったものがある。

 

・・・という事を、聞いたことがあった。

が、ここ数年VBAを扱う機会がなかったので、

試す機会もなかったところへきて、

VBAを書く生活になったので、早速採用!

 

書き方としては至って簡単。

 

 

サンプルとして、<〇/10>での処理状況を、

エクセル画面の左下へ表示してみたところ。

1秒毎にカウントしていくイメージ。

 

Sub StatusBar()
Dim i As Integer

For i = 1 To 10
    Application.StatusBar = i & "/10"
    Application.Wait Now() + TimeValue("00:00:01")
Next i

Application.StatusBar = False

End Sub

 

Application.StatusBar = "表示したい内容"

 

なので、簡単ですね。

 

最後にFalseを与えておかないと、

VBA処理後も表示が残るところは注意が必要。

 

例えば、配列の処理に対して進捗状況を追いたい時、

こんな風に書いておくと便利かな、と。

 

Sub statusbar_array()
Dim myarray(1 To 10) As Integer
Dim i As Integer

For i = 1 To UBound(myarray)
    Application.StatusBar = i & "/" & UBound(myarray)
    Application.Wait Now() + TimeValue("00:00:01")
Next i

Application.StatusBar = False


End Sub

 

配列の要素数に応じて、どの程度の処理を終えているかが

把握できるようになるので、使い道がありそう。

 

実際には、「表示する=メモリを食う」ので、

そのあたりは注意は必要なのかもしれない。