「Excelが固まった…?」
「それとも、まだ計算中…?」
Excelでシミュレーションをしていると、
「固まったのか、計算中なのか分からない」
と感じることがあります。
特に、少し複雑なシミュレーションで時間がかかる場合、
Excelが固まっているように見えることもあります。
そんな時は、ステータスバーに進捗を表示するコードを1つ入れると便利です。
Excel VBAでは、Application.StatusBarを使うことで処理の進捗を表示できます。

※このように確認できるようになります。
先に結論:こうして表示する
VBAの基本設定や始め方は、こちらの記事をご参照ください。
基本的な構成としては、次の3つです。
- 進捗度を表すための変数を設定する
- ステータスバーで進捗表示
- 終わったらステータスバーを空にする
以下、具体的に見ていきましょう。
①進捗を表す変数を設定する
Long型でも動きますが、
今回は進捗率を割合で扱うため、Double型にしています。
Dim progress As Double
progress = Round((i - 2) / (mR - 2) * 100, 0)変数 i は、For文のカウンタ変数です。
シミュレーションを実行している行を示しています。
変数 mR は、シミュレーションの最終行を取得するためのものです。
(mRはMaximum Row の略です)
例えば、こんな感じです。
mR = wsSim.Cells(wsSim.Rows.Count, 1).End(xlUp).Row「-2」としているのは、シミュレーションの開始行を3行目にしているためです。
②進捗の表示
「Application.StatusBar」を使って、ステータスバーの表示を設定します。
こんな感じです。
Application.StatusBar = "シミュレーション進捗: " & progress & "% 完了 (" & i - 2 & "/" & mR - 2 & "件)"“”で囲った部分は、固定の文字列を指定しています。
progressは①で設定した進捗度を示しており、
(" & i - 2 & "/" & mR - 2 & "件)は、「実行中の件数/総件数」を見える化しています。
③ステータスバーを空にする
シミュレーションが終わった後も、
「シミュレーション進捗: 100% 完了 (2400/2400件)」
のような表記が残らないようリセットしておきます。
次の1行でOKです。
Application.StatusBar = False これらの3つを入れることで、冒頭の画像のように進捗度を見える化できます。
サンプルの完成コードは以下に置いておきます。
全体のコード例
Sub Simulation()
Dim wsSim As Worksheet
Dim mR As Long
Dim i As Long
Dim progress As Double
Set wsSim = Sheets("sim")
mR = wsSim.Cells(wsSim.Rows.Count, 1).End(xlUp).Row
For i = 3 To mR
'進捗率
progress = Round((i - 2) / (mR - 2) * 100, 0)
'ステータスバー表示
Application.StatusBar = "シミュレーション進捗: " & progress & _
"% 完了 (" & i - 2 & "/" & mR - 2 & "件)"
'ここに処理を書く
'例:計算・シミュレーションなど
Next i
'ステータスバーを元に戻す
Application.StatusBar = False
End Sub何が便利か?
ひとことで言えば、「安心感」に尽きます。
30件程度であれば一瞬で完了するので、
このステータスバーの設定は不要でしょう。
しかし、これが1,000件、3,000件、10,000件とシミュレーションの数が増えると、
一瞬では終わらなくなります。
数分かかる処理を待っているうちに、
「なにか不具合が出ている…?」
と不安になってきます。
ここでステータスバーで進捗度が出ていると、安心感が全く違います。
メッセージボックスのように処理が途中で止まることもないので、おすすめです。
もし、同じような悩みがある方は、よろしければ活用してみてください。
見える化しよう
今回は「シミュレーション」をテーマに見える化をお伝えしてみました。
少し抽象化すれば「全体像を示す」といった話です。
Excelが全体像を示さないまま、シミュレーションを開始した結果、
私は不安になりました。
これって、仕事の場面でもよくありそうなことです。
- 全体像を話さずに各論に入る
- 現時点の進捗を示さず相談する
- 話したい事だけ話す
このような状況になっていないかは、一度確認しておきたいもの。
自分が分かっていても、相手が分かっているとは限りません。
認識のズレを解消するためにも、見える化をしておきましょう。
では、また次回。
編集後記
◇日記
昨日は、リアル開催セミナーの企画を中心に。
Peatixも使ってみて。
◇ブログネタ経緯
シミュレーションネタを書こうと思い。
◇1日1新
Peatixでのセミナー告知