ステータスバーを使う


処理の完了までに長い時間がかかる場合は、何らかの方法でユーザーに「現在処理中です...」と伝えたいものです。Windowsの標準機能などでは、ファイルを削除したりコピーしたりするとき、バーが右に伸びることで処理の進捗状況を伝えます。このバーを「プログレスバー」と呼びますが、こうした仕組みをExcelで実現するときは、ステータスバーを使うのが簡単です。

ステータスバーはExcelの最下部に表示されるバーで、通常は「コマンド」とか「編集」「入力」などと表示されます。また、セルのコピー中には「コピー先を選択して~」などと操作の手順をナビゲートしてくれます。ステータスバーにメッセージを表示するには、ApplicationオブジェクトのStatusBarプロパティに表示したい文字列を設定します。次のコードは「○回目の処理をしています...」をステータスバーに表示します。

Sub Sample01()
    Dim i As Long
    For i = 1 To 100
        Application.StatusBar = i & "回目の処理をしています..."
    Next i
    Application.StatusBar = False
End Sub

表示が一瞬で変化して読みとれないときは、Forステートメントの繰り返し回数100を増やしてください。なお、ステータスバーを使い終わったら、Excelが自由に使えるように戻してやります。それには、StatusBarプロパティにFalseを設定します。

徐々に伸びるプログレスバーを真似るなら次のようにします。実際にバーが伸びるわけではありませんが、現在作業しているというメッセージをユーザーに伝えるという本来の目的は果たせます。

Sub Sanple02()
    Dim i As Long
    For i = 1 To 20000
        If i Mod 1000 = 0 Then
            Range("A1") = i
            Application.StatusBar = "処理中..." & String(Int(i / 1000), "■")
        End If
    Next i
    Application.StatusBar = False
End Sub

表示が速すぎるときは、Range("A1") = iの代わりに時間のかかる処理などを行ってください。

なお、ステータスバーに表示する文字列の色や大きさを変更することはできません。