処理の完了までに長い時間がかかる場合は、何らかの方法でユーザーに「現在処理中です...」と伝えたいものです。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の代わりに時間のかかる処理などを行ってください。
なお、ステータスバーに表示する文字列の色や大きさを変更することはできません。