Office
 Computer >> コンピューター >  >> ソフトウェア >> Office

Excel の応答性を維持する:VBA の実行中にライブ進行状況メッセージを表示する

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 を処理中」と表示されます。 .

Excel の応答性を維持する:VBA の実行中にライブ進行状況メッセージを表示する

パーセンテージメッセージを追加

進行状況メッセージをカスタマイズしてパーセンテージを含めることができます。パーセンテージを計算してステータス バーのテキストに含めるだけです。

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%) を処理中」 と表示する、ユーザーに対する明確なステータス更新を作成します。 .

Excel の応答性を維持する:VBA の実行中にライブ進行状況メッセージを表示する

単純な数式タスクの例

ワークシートのアクションを実行する実際の例を見てみましょう。このバージョンでは、単純な売上金額の計算式を列に書き込みます。

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%

これはまだ単なるテキストですが、進行状況をより強力に視覚的に感じさせることができます。

Excel の応答性を維持する:VBA の実行中にライブ進行状況メッセージを表示する

ベスト プラクティス:ステータス バーを常にリセットする

最も一般的な間違いの 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 演習を無料で入手しましょう!
  1. MicrosoftExcelで自動データ型機能を使用する方法

    自動データ型の使用方法を知りたい MicrosoftExcelに機能がありますか? Excelの自動データ型 この機能を使用すると、都市、食品、音楽、動物、人物などの詳細を自動的に挿入できます。 Webブラウザを開いて詳細を手動で検索し、結果をコピーしてExcelシートに貼り付ける必要はありません。 化学元素に関する情報を追加したいとします。この自動ツールを使用して、原子量、記号、原子番号、CAS番号、グループ、電子親和力などのさまざまな情報を入力できます。 同様に、食品の場合、カロリー、コレステロール、脂肪、カルシウム、栄養、を追加できます。 などなど。 Excelのこの機能に気づかず、

  2. Mac で Microsoft Word がクラッシュし続ける問題を修正する 6 つの方法

    Microsoft Word が Mac でクラッシュし続けますか?ドキュメントやファイルを読み込めませんか? この投稿では、Mac で MS Word がクラッシュし続ける問題を修正できるいくつかのトラブルシューティング方法をリストしました。 ただし、解決策に進む前に、デバイスで「Microsoft Word が Mac でクラッシュし続ける」問題の原因について少し学びましょう。 また読む:Windows 10 で Microsoft Word がクラッシュし続けるためのクイック フィックス macOS で Microsoft Word が予期せずクラッシュするのはなぜですか?