Excel VBAの見える化|シミュレーションの進捗をリアルタイムで表示する方法

「Excelが固まった…?」
「それとも、まだ計算中…?」

Excelでシミュレーションをしていると、
「固まったのか、計算中なのか分からない」
と感じることがあります。

特に、少し複雑なシミュレーションで時間がかかる場合、
Excelが固まっているように見えることもあります。

そんな時は、ステータスバーに進捗を表示するコードを1つ入れると便利です。

Excel VBAでは、Application.StatusBarを使うことで処理の進捗を表示できます。

※このように確認できるようになります。

Contents

先に結論:こうして表示する

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でのセミナー告知

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
Contents