2022年03月10日
プログレスバーを表示
会社で使うExcel。いつの間にかExcelのために仕事をさせられていませんか?
Excelを使い倒して、仕事を楽にするツールにしちゃいましょう
この記事は、VBAを作ったものの、VBAの処理時間がかかるため、
プログレスバーで進捗状況を表示する方法の紹介です
目次
- 1. VBAのマクロに組み込みたい処理
- 2. どんな効果?
- 3. マクロ
- 4. マクロの使い方
- 5. サンプル
VBAのマクロに組み込みたい処理
ツールの進捗状況を表示したい
VBAを作ってみたもののデータの加工や繰り返し処理で処理時間がかかってしまうこともあるかと思います
書式設定を一括で実施したりなど速度の改善を図るほうが良いですが、
扱うデータ量によってはどうしても時間がかかります
VBAが動いているかどうかすら怪しいくらい時間がかかる処理の場合
プログレスバーを実装して視覚的に進捗が見えるとよいです
どんな効果?
- 処理の進捗が分かる(★ここを改善)
マクロ
Option Explicit
'---------------------------------------------------------------------------------------------------
'
' マクロ: プログレスバーを表示します。別途フォームも必要です
'
'---------------------------------------------------------------------------------------------------
Private Const WAITSEC As Long = 50 'ミリ秒
'---------------------------------------------------------------------------------------------------
' 概要:進捗バーを表示します
' 補足:実際は、<処理>でくくった範囲に、非常に時間のかかる処理が入ります
' 簡易的にfor文で重い処理に見立ててます
'---------------------------------------------------------------------------------------------------
Sub 進捗バーを表示()
Dim i As Long
Dim maxWidth As Long
Dim img As Object
Dim pas As String
'進捗バー表示
UserForm1.Show vbModeless '実行制御を呼び出した側にすぐ戻す
maxWidth = UserForm1.Label1.Width
UserForm1.Label1.Width = maxWidth * (1 / 100)
UserForm1.Label2.Caption = "処理を開始します"
For i = 1 To 100
'処理――→
Application.Wait [Now()] + WAITSEC / 86400000
'←――処理
DoEvents
UserForm1.Label1.Width = maxWidth * (i / 100)
UserForm1.Label2.Caption = "処理中です..." & i & "%"
Next i
UserForm1.Label2.Caption = "お待たせしました、終了しました"
Application.Wait [Now()] + 1000 / 86400000 '1秒
Unload UserForm1
End Sub
ユーザーフォーム
ユーザーフォーム(UserForm1)を追加します
ラベルを2つ追加し、一つは進捗バー、もう一つはテキスト出力に使います
ラベル名はLabel1、Label2を使用しています
マクロの使い方
マクロをエクセルに組み込んでください
[進捗バー]マクロを実行するとプログレスバーが表示されます
サンプル
想定している使い方です
・VBAで処理の重いマクロを上記マクロの「処理」の部分に当てはめる形です
・上記マクロでは重い処理を疑似的にfor文でまわしてます
・プログレスバーですが単純にラベルの幅を伸ばしているだけです
以上ですが、ちょっと味気ないので、次回、プログレスバーを少し華やかにしてみたいと思います 既にいくつか作成中ですが、重い処理だからプログレスバー表示しているのに、プログレスバーを 華やかにすると更に重い処理になってしまうのかな、と葛藤してます【このカテゴリーの最新記事】
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/11301756
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック