【Excel VBA】ステータスバーに進捗状況とプログレスバーを表示する方法

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
ブログランキング
PVアクセスランキング にほんブログ村
タイトルとURLをコピーしました