処理中に、進捗状況を知りたい時がある。処理速度に影響するらしく、多用は出来ないが、そんな時は「ステータスバー」を使う方法がある。
Excel VBAでは以下で、ステータスバーに任意の文字を表示することが出来る。
Application.StatusBar = "任意の文字"
従って、例えば「何件終わったか」を知るのであれば、こんな方法が考えられる。
Sub Macro1() Dim i As Long For i = 1 To 1000 Application.StatusBar = i Next Application.StatusBar = False End Sub
変数iをループさせる際、i番目であることをステータスバーに表示している。
最初から全数が分かっている場合は、それを示した方が、更に進捗が分かり良い。
例えば、こんな感じだ。
Sub Macro1() Dim iMax As Long: iMax = 1000 Dim i As Long For i = 1 To iMax Application.StatusBar = i & " / " & iMax Next Application.StatusBar = False End Sub
上記例のように、全数から進捗をイメージしやすい場合は良い。
しかし、例えばこんな場合はどうだろう。
「436 / 2659」と言われても、頭の中で何某かの換算が必要で、直感的理解に繋がりにくい。或いは百分率に変換などすれば、少しは分かり良くなるかもしれない。
Sub Macro1() Dim iMax As Long: iMax = 2659 Dim i As Long For i = 1 To iMax Application.StatusBar = Format(i / iMax * 100, "0.0%(全数:" & iMax & ")") Next Application.StatusBar = False End Sub
更に直感的な理解を求めるなら、進捗の見える化が良いと思う。
例えば、こんな感じだ。
Sub Macro1() Dim iMax As Long iMax = 2659 ' 最大値のおおよそ十分の一 ※小数点切り上げ Dim OneTenth As Long OneTenth = iMax / 10 - 1 ' 進捗度 ※10%単位 Dim Progress As Long Dim i As Long For i = 1 To iMax If i Mod OneTenth = 0 Then Progress = i / OneTenth Application.StatusBar = WorksheetFunction.Rept("■", Progress - 1) & _ WorksheetFunction.Rept("□", 10 - Progress + 1) & _ "(全数:" & iMax & ")" End If Next Application.StatusBar = False End Sub
どのような表現が分かり易いか、好みに合わせて記号を変えるのも良いと思う。
明日に続きます。
参考まで。