8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Excel VBAで進捗バー(プログレスバー)を実装する

Posted at

― 処理の「見えない時間」を可視化する ―

Excel VBAで時間のかかる処理を実行すると、
画面がフリーズしたように見え、
「止まったのか?」「落ちたのか?」が分からなくなることがあります。

本記事では、
UserFormを使って進捗バー(プログレスバー)を実装し、
進捗率・経過時間・残り時間を可視化する方法を紹介します。

処理速度を上げる話ではありません。
「処理中であることを正しく伝える」実装がテーマです。

実装イメージ

横に伸びる進捗バー

進捗率(%)

経過時間

残り時間(予測)

処理中の内容表示(ファイル名・工程名など)

構成概要
使用するもの

Excel VBA

UserForm

Labelコントロール

UserFormの主な部品
名前 用途
lblBack 進捗バーの背景
lblBar 進捗バー本体
lblInfo 進捗率・時間表示
lblFile 処理内容表示

※ Labelを使うことで描画が軽く、制御も簡単です。

実装コード
開始時刻を保持する
Option Explicit
Public startTime As Double

Public Sub StartProgress()
startTime = Timer
End Sub

Timer は秒単位で取得でき、進捗計測には十分

軽量で扱いやすいためVBA向き

進捗更新処理
Public Sub UpdateProgress(ByVal current As Long, ByVal total As Long, Optional msg As String = "")
Dim pct As Double
Dim elapsed As Double
Dim remain As Double

If total <= 0 Then total = 1
If current < 0 Then current = 0
If current > total Then current = total

pct = current / total

elapsed = Timer - startTime
If elapsed < 0 Then elapsed = elapsed + 86400   ' 日付またぎ対策

If pct > 0 Then
    remain = elapsed / pct - elapsed
Else
    remain = 0
End If

Me.lblBar.Width = Me.lblBack.Width * pct
Me.lblFile.Caption = msg

Me.lblInfo.Caption = _
    Format(pct, "0%") & _
    "(経過 " & Format(elapsed, "0.0") & "秒 / 残り 約" & Format(remain, "0.0") & "秒)"

DoEvents

End Sub

実装上のポイント
① 残り時間は「概算」でよい

SAMPLE2.png
こんなこと言われてみたい(〃▽〃)ポッ

正確な予測は不要

目安があるだけで待ち時間の不安は大きく減る

SAMPLE1.png
メッセージは毎回変わるようにしました。

② DoEventsは必須
DoEvents

これがないとUIが更新されない

進捗バーが最後に一気に100%になる

表示するための進捗バーなら、必ず入れる

③ 処理内容を表示する
Me.lblFile.Caption = msg

「今、何を処理しているか」が分かる

複数ファイル・複数工程では特に有効

なぜ進捗バーが重要か

処理時間は同じでも、体感は大きく変わる

フリーズと誤解されなくなる

マクロへの信頼性が上がる

問い合わせ・不安が減る

パフォーマンス改善の前に、UX改善です。

SAMPLE3.png
完了画面はこんな感じです。

応用例

CSV・ログ集計

フォルダ内ファイル一括処理

重い関数・集計マクロ

夜間バッチ前の手動実行ツール

Excel VBAでも、
「見せ方」を工夫すれば十分実用的です。

まとめ

Excel VBAでも進捗バーは簡単に実装できる

UserForm + Label で軽量に構成可能

残り時間表示はUX改善に効果大

DoEventsを忘れない

処理を速くするのが難しい場面でも、
「安心して待てる」仕組みは作れます。

8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?