HOME > 即効テクニック > Excel VBA > その他関連のテクニック > ステータスバーに進行状況を表示する

ステータスバーに進行状況を表示する|Excel VBA

その他関連のテクニック

ステータスバーに進行状況を表示する

(Excel 97/2000/2002/2003/2007/2010/2013/2016)

処理に時間のかかるマクロを実行する場合は、現在の状況をユーザーに提示するとよいでしょう。マクロを実行したとたん、マウスポインタが砂時計になって、そのまま長時間が経過するようではユーザーが不安になるからです。
マクロの実行中にユーザーへメッセージを伝える方法はいくつかありますが、もっとも簡単な方法のひとつはステータスバーを使う方法です。

ステータスバーはExcelの画面最下部にあるバーで、アイドル状態では「コマンド」または「準備完了」と表示されています。ここにはExcelの操作中、さまざまなメッセージが表示されます。
ステータスバーに任意の文字を表示するには、ApplicationオブジェクトのStatusBarプロパティを使います。次のマクロは、ステータスバーに現在の日時を表示します。

Sub Sample1()
    Application.StatusBar = Now
End Sub

マクロにより現在の日時が表示されたステータスバー

ステータスバーに表示した文字列は、マクロが終了しても表示されたままになります。
Excelの操作中にExcelからのメッセージを表示するには、マクロによるステータスバーの使用が完了したことを伝えなければなりません。
ステータスバーを元の状態に戻すには、StatusBarプロパティにFalseを指定します。

Sub Sample2()
    Application.StatusBar = Now
    MsgBox "ステータスバーに日時を表示しました"
    Application.StatusBar = False
End Sub

次のマクロは、C:\Windows\System32フォルダに存在するすべてのファイルの、タイムスタンプとファイルサイズをイミディエイトウィンドウに出力します。マクロ実行中は、ステータスバーに進行状況を表示します。

Sub Sample3()
    Dim FileCount As Long, cnt As Long
    Dim buf As String
    Const TARGET As String = "C:\Windows\System32\"
    
    With CreateObject("Scripting.FileSystemObject")
        FileCount = .GetFolder(TARGET).Files.Count
    End With
    
    buf = Dir(TARGET & "*.*")
    Do While Len(buf) <> 0
        cnt = cnt + 1
        
        Debug.Print buf & ":" & FileDateTime(TARGET & buf) & _
                    " " & FileLen(TARGET & buf)
        
        Application.StatusBar = "(" & cnt & "/" & FileCount & ")" & _
                                String(Int(cnt / FileCount * 10), "■") & _
                                buf & "を処理中…"
        buf = Dir()
    Loop
    
    Application.StatusBar = False
End Sub

マクロにより進行状況が表示されたステータスバー

Sample3は、時間のかかるマクロの例です。お使いのパソコンによって処理に要する時間は異なります。また、フォルダ内に存在するファイル数を取得するのに、FileSystemObjectオブジェクトを使用しています。