【Excel/VBA】プログレスバーを自作する方法

コンテンツ
IT・テクノロジー
みなさんこんにちは。

イプシロンです。

VBAで大量の処理をするときに時間が掛かり、
その間PC操作ができないとなると、手持ち無沙汰になりがちです。
220725_003_ココナラブログ.png


(ちゃんと動いてんのかな~。)
(あとどれくらいかかるんやろ~。)

なんて、雑念が湧き始めます。

そんな時に、役立つのがプログレスバーです。

プログレスバーを使用するメリットは以下のとおりです。

プログレスバーを使用するメリット

・ユーザーが処理を中断しなくなる(動作の見える化)
・進捗状況の見える化
・終了時間が推測可能

VBAには標準のプログレスバーがありますので、
それを使いがちなのですが、

実は、、、


標準のプログレスバーには落とし穴があるのです!!!

標準プログレスバーの落とし穴

それは、環境依存のエラーがあり、開発者のバージョンと、
ユーザーのバージョンに差異があるとエラーになりやすいのです。

64bit版のOfficeにはプログレスバーが実装されていないため、
表示させようとするだけでエラーになってしまいます。

なので、不特定多数のユーザー向けに配布する場合は、
そこを考慮して開発をする必要があります。

そのため、私はプログレスバーを自作することをおすすめします。

さっそく、いってみましょう!!!
220728_008_ココナラブログ.png


手順

1.「挿入」→「ユーザーフォーム」をクリックし、フォームを追加する
220728_002_ココナラブログ.png

ユーザーフォームが追加されます。

2.ツールボックスから「ラベル」を選択します。
220728_003_ココナラブログ.png

ラベルが追加されます。

3.ラベルをプログレスバーっぽく引き伸ばします。
220728_004_ココナラブログ.png

4.ラベルのCaptionを消します。(念のため)
220728_005_ココナラブログ.png

5.ラベルのBackColorを変更します。
220728_006_ココナラブログ.png

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.実行します
220728_007_ココナラブログ.png


完成!!!


う~む、、、


かんたん!!!
220725_005_ココナラブログ.png



要は、色の付いたラベルの長さを変えるだけということです。

見た目も色次第でプログレスバーっぽく見えますよね!!!


以上、標準プログレスバーの落とし穴を回避して、
プログレスバーを自作する手順でした。


最後まで読んでいただきましてありがとうございます。


では ノシ

Excel&VBAを活用したスクレイピングサービスになります。
サイトの情報をExcelに抽出したり、入力したり、
単純作業を自動化するサービスです。

サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す