Excel VBAは、処理の進捗状況を表示しながら他の画面更新を停止することが可能です。
公式な情報は探せませんでしたが、ScreenUpdatingプロパティを使用して画面更新を停止した場合でも、ステータス バーの情報は更新される仕様のようです。
以前から仕様に変更はなさそうですが、動作確認のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2310)です。
なお、ステータス バーは画面左下の位置で、テキスト情報が表示されます。
VBAサンプル
マクロの速度を向上させるために画面更新は停止し、処理が適切に実行されていることを確認できるように進捗状況をステータスバーに表示します。
なお、ステータスバーの更新頻度が高すぎると、進捗状況を適切に把握が困難なケースもあるので、IF文を利用して書き換え頻度を抑制したサンプルです。
Sub 進捗状況は表示して他の画面更新は停止() Dim i As Long '画面更新の停止' Application.ScreenUpdating = False '事例でループ処理' For i = 1 To 1000 'iが10で割り切れる時だけ、ステータスバーの更新' If i Mod 10 = 0 Then Application.StatusBar = i & " 番目の処理中" '画面更新が停止していることを示すための単なる事例として、セル選択' ActiveSheet.Cells(i, 1).Select Next i '画面更新の再開と、ステータスバーを既定のテキストに戻す' Application.StatusBar = False Application.ScreenUpdating = True End Sub
補足説明
- 画面更新の停止が不要な場合は「Application.ScreenUpdating」の記述は削除します。
- Mod は、割算の余りのみを返す演算子です。
上記はiが10で割り切れる時だけ、ステータスバーを更新しています。
learn.microsoft.com
その他、「Application.ScreenUpdating」「Application.StatusBar」を利用した実用的なサンプルは以下です。
(Mod演算子は未利用)
以上、Excel VBAで、処理の進捗状況を表示しながら他の画面更新は停止の事例でした。