【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スクレイピングを使って自動化しましょう!

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA