【Excel/VBA】プログレスバーを自作する方法
みなさんこんにちは。
VBAで大量の処理をするときに時間が掛かり、
その間PC操作ができないとなると、手持ち無沙汰になりがちです。
(ちゃんと動いてんのかな~。)
(あとどれくらいかかるんやろ~。)
なんて、雑念が湧き始めます。
そんな時に、役立つのがプログレスバーです。
この記事はこんな人におすすめ
この記事はこんな人におすすめです!
- VBAプログラミング:初級者~中級者
- 自動化処理を見える化したい人
- プログレスバーの作成方法で検索していても答えが見えていない人
- コードだけサクッと取得したい人
プログレスバーを使用するメリット
プログレスバーを使用するメリットは以下のとおりです。
- ユーザーが処理を中断しなくなる(動作の見える化)
- 進捗状況の見える化
- 終了時間が推測可能
VBAには標準のプログレスバーがありますので、
それを使いがちなのですが、
実は、、、
標準のプログレスバーには落とし穴があるのです!!!
標準プログレスバーの落とし穴
それは、環境依存のエラーがあり、
開発者のバージョンと、ユーザーのバージョンに差異があるとエラーになりやすい
ということです。
64bit版のOfficeにはプログレスバーが実装されていないため、
表示させようとするだけでエラーになってしまいます。
なので、不特定多数のユーザー向けに配布する場合は、
そこを考慮して開発をする必要があります。
そのため、私はプログレスバーを自作することをおすすめします。
さっそく、いってみましょう!!!
手順
1.「挿入」→「ユーザーフォーム」をクリックし、フォームを追加する
ユーザーフォームが追加されます。
2.ツールボックスから「ラベル」を選択します。
ラベルが追加されます。
3.ラベルをプログレスバーっぽく引き伸ばします。
4.ラベルのCaptionを消します。(念のため)
5.ラベルのBackColorを変更します。
6.標準モジュールに以下のコードをコピペしてください。
Sub testfunction()
Dim maxWidth As Integer
Dim i As Integer
' 自作のプログレスバー表示
UserForm1.Show vbModeless
maxWidth = UserForm1.Label1.Width
UserForm1.Label1.Width = maxWidth * (1 / 100)
For i = 1 To 100
DoEvents
'1ミリ秒待機する処理
Application.Wait [Now() + "0:00:00.1"]
UserForm1.Label1.Width = maxWidth * (i / 100)
Next
MsgBox "終了!"
Unload UserForm1
End Sub
7.実行します
完成!!!
う~む、、、
かんたん!!!
要は、色の付いたラベルの長さを変えるだけということです。
見た目も色次第でプログレスバーっぽく見えますよね!!!
以上、標準プログレスバーの落とし穴を回避して、
プログレスバーを自作する手順でした。
最後まで読んでいただきましてありがとうございます。
では ノシ
それでも解決しない人へ
Excel&VBAを活用したスクレイピングサービスを出品しております。
サイトの情報をExcelに抽出したり、入力したり、
単純作業を自動化するサービスです。
Excelにてブラウザ操作自動化ツールを作成します その作業、webスクレイピングを使って自動化しましょう!