Excel の応答性を維持する:VBA の実行中にライブ進行状況メッセージを表示する
コードが長く、VBA マクロが数秒間実行されると、Excel がフリーズしたり応答しなくなったりすることがあります。コードが適切に動作している場合でも、画面上で何も起こっていないように見えるため、ユーザーはワークブックがフリーズしたと考える可能性があります。この問題を回避する簡単な方法は、マクロの実行中に Excel のステータス バーにライブ メッセージを表示することです。
このチュートリアルでは、VBA の実行中に進行状況メッセージを表示する方法を示します。ユーザーフォームやグラフィカルな進行状況バーは必要ありません。多くの場合、Application.StatusBar で十分です。
Application.StatusBar を使用する理由
Excel には、アプリケーション ウィンドウの下部にステータス バーが組み込まれています。 VBA は、その領域の通常のテキストを一時的にカスタム メッセージに置き換えることができます。
これは、マクロで次のような更新を表示できることを意味します。
- 行 10/100 を処理中
- データをインポートしています…
- 数式を書く…
- 65% 完了
これは、マクロがまだ実行中であることをユーザーに知らせたいが、完全な視覚的な進行状況バーを作成するという余分な作業は望まない場合に便利です。行数やパーセンテージを表示することで、メッセージの情報をさらに増やすことはできますが、テキストベースのソリューションであることに変わりはありません。
基本的な構文:
Excel ステータス バーにメッセージを表示するには、次を使用します。
Application.StatusBar = "Processing..."
マクロが終了したら、次のコマンドでステータス バーをリセットします。
Application.StatusBar = False
Application.StatusBar =False に設定すると、ステータス バーの制御が Excel に復元され、デフォルトのメッセージが再び表示されるようになります。このステップは決してスキップしないでください。
基本的な例:単純な進捗メッセージ
これは、単純な進行状況メッセージを備えた最も基本的なバージョンです。ステータス バーには、「レポートを実行しています…お待ちください」と表示されます。
Sub SimpleStatusBar() Application.StatusBar = "Running report... please wait" ' Simulate work Dim i As Long For i = 1 To 50000 ' Your processing here Next i Application.StatusBar = False ' Restore the status bar MsgBox "Done!" End Sub
これは機能しますが、固定メッセージが 1 つしか表示されません。マクロが実行中であることはユーザーに通知されますが、実際の進行状況は表示されません。
ループ中のライブ進行状況を表示
実際のマクロのほとんどでは、行、セル、ファイル、またはレコードを 1 つずつ処理します。これにより、ループの進行に応じてステータス バーを簡単に更新できます。
Sub ShowLoopProgress() Dim i As Long Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To lastRow ' Simple action Cells(i, "K").Value = "Processed" ' Update progress message Application.StatusBar = "Processing row " & (i - 1) & " of " & lastRow DoEvents Next i Application.StatusBar = False MsgBox "Task completed!" End Sub
- DoEvents を使用すると、マクロの実行中に Excel が画面を更新して応答できるようになります
- これがないと、特に長いループの場合、マクロが終了するまでステータス バーが目に見えて更新されない可能性があります
- 実行がわずかに遅くなる可能性があるため、必要な場合を除き、非常に大規模なループで過度に使用しないでください。
ステータス バーの下部に、「行 90/101 を処理中」と表示されます。 .

パーセンテージメッセージを追加
進行状況メッセージをカスタマイズしてパーセンテージを含めることができます。パーセンテージを計算してステータス バーのテキストに含めるだけです。
Sub ShowPercentageProgress()
Dim i As Long
Dim lastRow As Long
Dim percentDone As Double
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
' Simple action
Cells(i, "K").Value = "Processed"
' Update progress message
percentDone = (i - 1) / (lastRow - 1)
Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _
" (" & Format(percentDone, "0%") & ")"
DoEvents
Next i
Application.StatusBar = False
MsgBox "Task completed!"
End Sub
このコードは、「行 14/100 (14%) を処理中」 と表示する、ユーザーに対する明確なステータス更新を作成します。 .

単純な数式タスクの例
ワークシートのアクションを実行する実際の例を見てみましょう。このバージョンでは、単純な売上金額の計算式を列に書き込みます。
Sub ShowProgressWithFormula()
Dim i As Long
Dim lastRow As Long
Dim percentDone As Double
lastRow = Cells(Rows.Count, "H").End(xlUp).Row
For i = 2 To lastRow
' Simple action
Cells(i, "K").Formula = "=H" & i & "*I" & i
' Update progress message
percentDone = (i - 1) / (lastRow - 1)
Application.StatusBar = "Writing formulas... " & _
"Row " & (i - 1) & " of " & (lastRow - 1) & _
" (" & Format(percentDone, "0%") & ")"
DoEvents
Next i
Application.StatusBar = False
MsgBox "Formulas added in column K!"
End Sub
これは単純な例ですが、多くのユーザーが実行するワークシート タスクのタイプを厳密に反映しています。
テキストベースの「偽の進行状況バー」
Application.StatusBar は実際のグラフィカルな進行状況バーを作成できません。ただし、文字を使用してバーを構築することで、それをシミュレートすることができます。
Sub StatusBarWithTextProgressBar() Dim i As Long Dim lastRow As Long Dim percentDone As Double Dim barLength As Integer Dim filledBars As Integer Dim progressBar As String lastRow = Cells(Rows.Count, "A").End(xlUp).Row barLength = 20 For i = 2 To lastRow Cells(i, "K").Value = "Processed" percentDone = (i - 1) / (lastRow - 1) filledBars = Int(percentDone * barLength) progressBar = String(filledBars, "|") & String(barLength - filledBars, ".") Application.StatusBar = "Progress: [" & progressBar & "] " & _ Format(percentDone, "0%") DoEvents Next i Application.StatusBar = False MsgBox "Completed!" End Sub
VBA を実行すると、ステータス バーに次のような内容が表示されます。
進捗状況:[||||||||||………] 67%
これはまだ単なるテキストですが、進行状況をより強力に視覚的に感じさせることができます。

ベスト プラクティス:ステータス バーを常にリセットする
最も一般的な間違いの 1 つは、マクロの最後にステータス バーを復元するのを忘れることです。 Application.StatusBar =False を使用しない場合 , Excel では、マクロが終了した後もカスタム テキストが表示され続ける場合があります。より安全なバージョンでは、単純なエラー処理が使用されるため、何か問題が発生した場合でもステータス バーがリセットされます。
Sub SafeStatusMessage()
Dim i As Long
Dim lastRow As Long
Dim percentDone As Double
On Error GoTo CleanUp
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
Cells(i, "K").Value = "Processed"
percentDone = (i - 1) / (lastRow - 1)
Application.StatusBar = "Processing row " & (i - 1) & " of " & (lastRow - 1) & _
" (" & Format(percentDone, "0%") & ")"
DoEvents
Next i
MsgBox "Task completed!"
CleanUp:
Application.StatusBar = False
If Err.Number <> 0 Then
MsgBox "Error: " & Err.Description
End If
End Sub
このパターンは、実際の使用により適しています。
ステータス メッセージを改善するためのヒント
適切なステータス バー メッセージは短く、具体的である必要があります。メッセージは簡潔かつ有益なものにしてください。良い例は次のとおりです。
- 販売データをインポートしています…
- 重複をチェックしています…
- ワークシートの書式設定中…
- レコード 45/200 を処理中…
- レポートを最終処理中…
メッセージを実際に実行されているタスクと一致させてみてください。これにより、マクロがよりプロフェッショナルに感じられ、信頼しやすくなります。
すぐに使用できる再利用可能なパターン
このパターンは、ほぼすべてのマクロで再利用できます。このコードをコピーして、必要な場所にロジックを挿入するだけです。
Sub MyMacro() On Error GoTo CleanUp Dim i As Long Dim total As Long total = 100 For i = 1 To total Application.StatusBar = "Processing item " & i & " of " & total DoEvents ' Your code here Next i CleanUp: Application.StatusBar = False End Sub
結論
このチュートリアルに従うことで、VBA の実行中に進行状況メッセージを簡単に表示できます。 VBA マクロがまだ動作していることをユーザーに示したい場合、Application.StatusBar は利用できる最も簡単なツールの 1 つです。これは完全な進行状況バーではありませんが、多くの場合、十分以上です。このアプローチは実装が簡単で信頼性が高く、必要なコードは最小限で、長時間実行される VBA プロシージャ時のユーザー エクスペリエンスが大幅に向上します。メイン ループ内にステータス更新を配置して、独自のマクロでテストします。必要なコードは数行だけです。
ソリューション付きの高度な Excel 演習を無料で入手しましょう!-
MicrosoftExcelで自動データ型機能を使用する方法
自動データ型の使用方法を知りたい MicrosoftExcelに機能がありますか? Excelの自動データ型 この機能を使用すると、都市、食品、音楽、動物、人物などの詳細を自動的に挿入できます。 Webブラウザを開いて詳細を手動で検索し、結果をコピーしてExcelシートに貼り付ける必要はありません。 化学元素に関する情報を追加したいとします。この自動ツールを使用して、原子量、記号、原子番号、CAS番号、グループ、電子親和力などのさまざまな情報を入力できます。 同様に、食品の場合、カロリー、コレステロール、脂肪、カルシウム、栄養、を追加できます。 などなど。 Excelのこの機能に気づかず、
-
Mac で Microsoft Word がクラッシュし続ける問題を修正する 6 つの方法
Microsoft Word が Mac でクラッシュし続けますか?ドキュメントやファイルを読み込めませんか? この投稿では、Mac で MS Word がクラッシュし続ける問題を修正できるいくつかのトラブルシューティング方法をリストしました。 ただし、解決策に進む前に、デバイスで「Microsoft Word が Mac でクラッシュし続ける」問題の原因について少し学びましょう。 また読む:Windows 10 で Microsoft Word がクラッシュし続けるためのクイック フィックス macOS で Microsoft Word が予期せずクラッシュするのはなぜですか?