【ExcelVBA】ステータスバーに進捗状況を表示する方法
スポンサーリンク

概要

ExcelVBAにて時間のかかる処理をした場合、あとどのくらい時間がかかりそうなのか知りたくなります。
本記事では、Excelウインドウのステータスバーに進捗状況(進捗率)を表示する方法をご紹介します。

  1. 進捗率表示
  2. 進捗バー表示
  3. 進捗バー表示(速度改善版)

進捗率表示

コード

Sub Function1()

    '定数
    Const indexStart = 0
    Const indexEnd = 99999

    '進捗率
    Dim percent As Long
    percent = -1

    For i = indexStart To indexEnd
    
        '時間のかかる処理
        Debug.Print (i);

        '進捗率
        percent = Application.WorksheetFunction.RoundDown(i / indexEnd * 100, 0)
            
        'ステータスバー設定
        Application.StatusBar = "進捗(" & percent & "%)"
    
    Next

    'ステータスバー初期化
    Application.StatusBar = False

End Sub

実行結果

実行すると、進捗状況がパーセントで表示されます。

解説

現在の進捗率(パーセント)をステータスバーに表示する機能です。

進捗率は、 現在インデックス ÷ 最終インデックス の結果を RoundDown 関数で小数点以下を切り捨てて算出します。
ステータスバー設定は、 Application.StatusBar プロパティに進捗率をセットします。
最後に Application.StatusBar に False をセットすることでステータスバーにセットした文字列を消去します。

進捗バー表示

コード

Sub Function2()

    '定数
    Const indexStart = 0
    Const indexEnd = 99999

    '進捗率
    Dim percent As Long
    percent = -1

    '進捗バー情報
    Const progressMax = 10
    Dim progressCompleted As Long
    Dim progressRemaining As Long

    For i = indexStart To indexEnd
    
        '時間のかかる処理
        Debug.Print (i);

        '進捗率
        percent = Application.WorksheetFunction.RoundDown(i / indexEnd * 100, 0)
        
            
        '進捗バー情報
        progressCompleted = Application.WorksheetFunction.RoundDown(percent / 10, 0)
        progressRemaining = progressMax - progressCompleted
        
        'ステータスバー設定
        Application.StatusBar = "進捗(" & percent & "%) " & String(progressCompleted, "■") & String(progressRemaining, "□")
    
    Next

    'ステータスバー初期化
    Application.StatusBar = False

End Sub

実行結果

実行すると、進捗状況がパーセントと■で表示されます。
■で視覚的に把握できるので、進捗状況が分かりやすいです。

解説

現在の進捗率(パーセント)と進捗バーをステータスバーに表示する機能です。

進捗率は、 現在インデックス ÷ 最終インデックス の結果を RoundDown 関数で小数点以下を切り捨てて算出します。
進捗バーは、10個の"□"を表示し、進捗が10%毎に"■"に置き換えていきます。
ステータスバー設定は、 Application.StatusBar プロパティに進捗率と進捗バーをセットします。
最後に Application.StatusBar に False をセットすることでステータスバーにセットした文字列を消去します。

進捗バー表示(速度改善版)

コード

Sub Function3()

    '定数
    Const indexStart = 0
    Const indexEnd = 99999

    '進捗率
    Dim percent As Long
    Dim percent_prev As Long
    percent = -1
    percent_prev = -1

    '進捗バー情報
    Const progressMax = 10
    Dim progressCompleted As Long
    Dim progressRemaining As Long

    For i = indexStart To indexEnd
    
        '時間のかかる処理
        Debug.Print (i);

        '進捗率
        percent = Application.WorksheetFunction.RoundDown(i / indexEnd * 100, 0)
        
        '進捗率変化時
        If percent <> percent_prev Then
            
            percent_prev = percent
            
            '進捗バー情報
            progressCompleted = Application.WorksheetFunction.RoundDown(percent / 10, 0)
            progressRemaining = progressMax - progressCompleted
            
            'ステータスバー設定
            Application.StatusBar = "進捗(" & percent & "%) " & String(progressCompleted, "■") & String(progressRemaining, "□")
        
        End If

    Next

    'ステータスバー初期化
    Application.StatusBar = False

End Sub

実行結果

実行すると、進捗状況がパーセントと■で表示されます。
実際に試して頂くと、今回のプログラムのほうが、速度が速いことが分かると思います。

解説

現在の進捗率(パーセント)と進捗バーをステータスバーに表示する機能の速度改善版です。

ステータスバー設定は速度が遅いため、極力アクセスを控える必要があります。
よって、本コードでは、進捗率に変化があった場合のみステータスバー設定を行い速度を改善しました。

進捗率は、 現在インデックス ÷ 最終インデックス の結果を RoundDown 関数で小数点以下を切り捨てて算出します。
進捗バーは、10個の"□"を表示し、進捗が10%毎に"■"に置き換えていきます。
ステータスバー設定は、進捗率に変化があった場合のみ行い、 Application.StatusBar プロパティに進捗率と進捗バーをセットします。
最後に Application.StatusBar に False をセットすることでステータスバーにセットした文字列を消去します。

関連リンク

  1. 【ExcelVBA】目次
スポンサーリンク
おすすめの記事