プログレスバーとは
プログレスバーとは以下画像のように、進捗によってバーが伸びていくことによって現在の進捗状況を把握できるようなオブジェクトのことです。
マクロを実行した際に処理時間が長い場合、このようなプログレスバーを表示することでユーザに現在の進捗を把握させてストレスを軽減させるといった用途に使用できます。
プログレスバーの使用方法
ツールボックスにプログレスバーを追加
デフォルトではツールボックスの中にプログレスバーが存在しない状態になっています。
このためツールボックスにプログレスバーを追加する設定を行います。
VBエディタの [ツール → その他のコントロール] をクリックします。
以下のコントロール追加画面が表示されるため、リストの中から Microsoft ProgressBar Control, version 6.0
を探し、チェックを入れます。その後 OK をクリックします。
これでツールボックスにプログレスバーが追加されます。
プログレスバーの長さの調整方法
プログレスバーにはプロパティとして Value
があります。
Value の値の範囲はデフォルトで 0~100 です。この値によってバーの長さを制御します。
Value 0 で Min の長さ、Value 100 で Max の長さになります。
◆Value = 0 の場合
◆Value = 50 の場合
◆Value = 100 の場合
VBA での Value の設定方法ですが、ユーザーフォーム UserForm1 の中にプログレスバー ProgressBar1 が設置されている場合、以下のように記述します。
UserForm1.ProgressBar1.Value = <値>
プログレスバーによる進捗表示の活用例
For 文による繰り返し処理を行うマクロがあったとします。
この For 文の一周の処理を行うごとにプロブレスバーの長さを伸ばすという使い方をしてみます。
以下のマクロでは For 文で 50 回の繰り返し処理を行いますが、1回のループごとにプログレスバーの Value を i / 50 * 100
(i 回目のループでの進捗率を表す) に更新しています。合わせてユーザーフォーム上のラベルに進捗状況を文字で表示するようにしています。
Sub main()
Dim i%
UserForm1.Show vbModeless
For i = 1 To 50
Application.Wait [Now()] + 0.1 / 86400
UserForm1.ProgressBar1.Value = i / 50 * 100
UserForm1.Label1.Caption = "進捗" & i & "/50"
UserForm1.Repaint
Next
Unload UserForm1
End Sub
このマクロを実行すると以下のようにプログレスバーが表示され、処理が進むごとにバーが伸びていき処理進捗が可視化されます。