プログレスバー

したい事(逆引き)

Excel VBA では、Application.StatusBar を使って プログレスバー風の表示を実現することができます。ステータスバーはテキストしか表示できませんが、記号(■、□、= など)を組み合わせて疑似的なバーを作ることで進捗を視覚的に表現できます。


✅ プログレスバー風の基本構成

Application.StatusBar = "処理中: [■■■■□□□□□□] 40%"
  • 「■」=進捗済み
  • 「□」または「・」=未処理
  • パーセンテージをつけるとわかりやすい

🔷 実用コード例:10件の処理をプログレスバー表示

Sub ステータスバーでプログレスバー()
Dim i As Long
Dim total As Long: total = 10
Dim barLength As Long: barLength = 20 ' プログレスバーの長さ(記号の数)

Dim percentComplete As Double
Dim numFilled As Long
Dim progressBar As String

For i = 1 To total
' 進捗率の計算
percentComplete = i / total
numFilled = Round(barLength * percentComplete)

' プログレスバー文字列の作成
progressBar = "[" & String(numFilled, "■") & String(barLength - numFilled, "□") & "]"
Application.StatusBar = "処理中: " & progressBar & " " & Format(percentComplete, "0%")

' 擬似処理(1秒待つ)
DoEvents
Application.Wait Now + TimeValue("00:00:01")
Next i

' ステータスバーを元に戻す
Application.StatusBar = False
End Sub

🔷 出力イメージ(ステータスバー)

lessコピーする編集する処理中: [■■■■■■■■□□□□□□□□] 40%

🔷 コード解説

部分内容
total全処理件数
barLengthプログレスバーの表示幅(■+□の合計)
numFilled現時点で表示する「■」の数
String(numFilled, "■")numFilled 個の「■」を生成
DoEventsステータスバーを即時更新するために必要
Application.Wait擬似的に時間経過をシミュレート(本来は処理内容を記述)

🔷 応用:100件など大量処理でもOK

以下のように調整可能です:

total = 100
barLength = 30

barLength を増やすと進捗バーが細かくなり、よりなめらかに見えます。


🔷 エラー対応付きのテンプレート

Sub プログレスバー付き処理()
On Error GoTo エラー処理

Dim i As Long, total As Long
total = 50

For i = 1 To total
Call ShowProgressBar(i, total)

' 実際の処理内容を書く
DoEvents
Application.Wait Now + TimeValue("00:00:05")
Next

正常終了:
Application.StatusBar = False
Exit Sub

エラー処理:
MsgBox "エラー: " & Err.Description
Resume 正常終了
End Sub

Sub ShowProgressBar(ByVal i As Long, ByVal total As Long)
Dim percent As Double, barLen As Long, filled As Long, bar As String
percent = i / total
barLen = 30
filled = Round(barLen * percent)
bar = "[" & String(filled, "■") & String(barLen - filled, "□") & "]"
Application.StatusBar = "進行中 " & bar & " " & Format(percent, "0%")
End Sub

🔷 記号バリエーション

記号見た目の特徴
(全角)と 最も一般的で視認性が良い
(半角)細かく表示できるがフォントに依存
=-素朴な印象。レガシー対応用
円形で柔らかい印象になる

🔷 まとめ

特徴内容
目的ステータスバーに進捗バーを疑似表示
メリットユーザーに処理中であることを明示できる
実装方法String 関数で記号の組み合わせを作る
更新の工夫DoEvents を使って表示更新を保証
注意点最後に Application.StatusBar = False を忘れずに!
タイトルとURLをコピーしました