【Excel VBA】ユーザーフォームでプログレスバーを作る方法

【業務効率化】VBA
スポンサーリンク

「これ固まってない? それとも計算中?」

大量のデータをVBAで処理しているとき、画面が白くなって「応答なし」の文字が出た瞬間の不安感といったらありませんよね。

私も昔、1時間かかる集計マクロを回している最中に不安になり、強制終了してしまったことがあります。あのまま待っていれば実はあと数秒で終わったかもしれません……。

そんな「処理待ちの不安」を解消し、マクロをプロっぽく仕上げてくれるのが「プログレスバー(進捗状況バー)」です。

今回は、初心者の方でも3分で実装できる、シンプルで効果的なプログレスバーの作り方を解説します。

【業務効率化】VBAの記事を見る 

なぜ「進捗の見える化」が重要なのか?

人間は「終わりが見えない作業」に対して、実際の時間よりも長く、苦痛に感じる性質があります。

これをITの世界では「ユーザー体験(UX)」と呼びますが、どの現場でも同じく重要です。

進捗バーを導入する主なメリットは以下の通りです。

  • 安心感: 「あと20%で終わる」と視覚的に分かるだけで、待ち時間のストレスが大幅に軽減されます。
  • 時間の有効活用: 処理が終わるまでの目安が立つため、次の業務の予定をスムーズに立てやすくなります。
  • エラーの早期発見:バーが一定の箇所でピタッと止まったままになるため、本当のフリーズ状態を早期に判断できます。

プログレスバーの仕組み

プログレスバーの仕組みは、とてもシンプルです。

「細長い箱(背景)」の中に、「色がついた板(バー)」を置いて、その板の横幅を少しずつ伸ばしていくだけです。

100枚の書類を処理するなら、1枚終わるごとに板の長さを1%ずつ伸ばせば、100枚目で満タンになりますよね。

【実践】プログレスバーの実装ステップ

まずは、ユーザーフォームを1つ作りましょう(名前は UserForm1 とします)。

  1. 背景を作る: ラベル(Label1)を配置し、枠線をつけて背景を白にします。
  2. 動くバーを作る: もう一つのラベル(Label2)をLabel1の上に重ねます。背景色を青などの目立つ色にします。
  3. 初期値を設定: Label2の横幅(Width)を、最初は「0」にしておきます。

コピペで使えるコード

マクロのループ処理の中に、以下のコードを組み込むだけで動きます。

Sub SampleProgressBar()
    Dim i As Long
    Dim totalCount As Long
    Dim progressPercent As Double
   
    ' 処理するデータの総数(例:1000行)
    totalCount = 1000
   
    ' ユーザーフォームを表示(モーダル解除でマクロを止めない)
    UserForm1.Show vbModeless
   
    For i = 1 To totalCount
        ' --- ここに本来の処理を書く ---
        ' (例: セルの計算やデータ転記など)
        ' ----------------------------
       
        ' 1. 進捗率を計算する
        ' 現在の数 ÷ 全体の数
        progressPercent = i / totalCount
       
        ' 2. バーの長さを更新する
        ' Label1(背景)の幅に対して、進捗率を掛け算する
        UserForm1.Label2.Width = UserForm1.Label1.Width * progressPercent
       
        ' 3. %表示も更新(オプション)
        UserForm1.Caption = "処理中... " & Format(progressPercent, "0%")
       
        ' これがないと、画面の更新が追いつかず「応答なし」に見えてしまいます
        DoEvents
    Next i
   
    Unload UserForm1
    MsgBox "処理が完了しました!"
End Sub

失敗から学んだ「DoEvents」の重要性

コード内にサラッと記述したDoEventsですが、これが本機能において最も重要なポイントとなります。

VBAは処理に集中すると「画面を書き換える」という仕事を後回しにしてしまいます。その結果、バーが動かず、結局フリーズしたように見えてしまうことがあります。

DoEvents は、VBAに「ちょっと一息ついて、画面を更新していいよ」と指示を出します。

これを忘れると、プログレスバーはただの「動かない絵」になってしまいますので注意しましょう。

プログレスバーを作る手間は、わずか数分です。たったそれだけで、毎日マクロを使う自分や同僚にとっては、重宝される機能になります。

ぜひ活用してみてください!

【業務効率化】VBAの記事を見る 





VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました