Excelのステータスバーに進捗状況とプログレスバーを表示する方法を紹介します。
ステータスバーに進捗状況とプログレスバーを表示する関数
ステータスバーに進捗状況とプログレスバーを表示する関数です。
進捗率が10%と増えるごとに、プログレスバーの目盛りが1目盛り分増えます。
Excel風プログレスバー
Excelの処理中に表示されるプログレスバーに似たデザインのプログレスバーです。
''' <summary>
''' ステータスバーの進捗状況を更新する
''' </summary>
''' <param name="per">進捗率(1~100)</param>
''' <param name="msg">進捗状況</param>
''' <remarks></remarks>
Public Sub StatusBerProgressUpdate(ByVal per As Integer, ByVal msg As String)
'定義
Const RES = 10 '1目盛りあたりの進捗率
'進捗状況更新
If per > 100 Then per = 100
Dim ProgCnt1 As Long: ProgCnt1 = Int(per / RES)
Dim ProgCnt2 As Long: ProgCnt2 = Int(100 / RES) - ProgCnt1
Application.StatusBar = String(ProgCnt1, ChrW(&H2587)) & String(ProgCnt2, ChrW(&H3164)) & " " & per & "%" & " " & msg
DoEvents
End Sub
クラシックプログレスバー
目盛りに継ぎ目があるプログレスバーです。
''' <summary>
''' ステータスバーの進捗状況を更新する
''' </summary>
''' <param name="per">進捗率(1~100)</param>
''' <param name="msg">進捗状況</param>
''' <remarks></remarks>
Public Sub StatusBerProgressUpdate(ByVal per As Integer, ByVal msg As String)
'定義
Const RES = 10 '1目盛りあたりの進捗率
'進捗状況更新
If per > 100 Then per = 100
Dim ProgCnt1 As Long: ProgCnt1 = Int(per / RES)
Dim ProgCnt2 As Long: ProgCnt2 = Int(100 / RES) - ProgCnt1
Application.StatusBar = String(ProgCnt1, ChrW(&H25AC)) & String(ProgCnt2, ChrW(&H25AD)) & " " & per & "%" & " " & msg
DoEvents
End Sub
サンプル
200msごとに10パーセントづつプログレスバーを進めるサンプルです。
Public Sub Sample1()
Dim i As Long
For i = 0 To 100 Step 10
Call StatusBerProgressUpdate(i, "処理中")
Application.Wait [Now()] + 0.2 / 86400
Next
End Sub