こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAでマクロの進捗状況を確認する方法を知っていますか?プログレスバーを使えば、お手軽に処理の進捗状況を確認することができます!そこで今回は、
- 進捗状況を確認するための2つの方法
- プログレスバーの使い方
- プログレスバーを使った具体的なサンプルコード
- 合わせて覚えておくと便利なユーザーフォームの作り方
といった基礎的なことから、応用的な方法まで、徹底的に解説します!
マクロの進捗状況を表示する理由とは
はじめに、進捗状況を表示する理由について簡単に解説します。「Sheet1シートのデータをコピーして、Sheet2シートに貼り付ける」のように、シンプルな処理の場合はいらないのですが、次のように処理が長い場合はマクロの処理が終わるまで時間がかかってしまいます。
- 処理1:請求データのリストをCSVファイルからインポート
- 処理2:インポートした請求データのリスト数分、請求書をPDFで自動作成
- 処理3:請求データ一覧シートの請求書出力フラグを更新して処理終了
処理開始のボタンを押してから数十秒時間がかかる場合、処理を実行している人は
と不安に思ってしまいます。そのため、「どこまで処理が進んでいるか」を伝えるために、進捗状況を表示するのがおすすめです。
マクロの進捗状況を表示する2つの方法
次に、マクロの進捗状況を表示する方法について解説します。進捗状況を表示する方法は2つあります。
方法1:ステータスバーに表示する
まずは、ステータスバーに表示する方法を解説します。ステータスバーはExcelの左下にある、メッセージを表示するエリアのことです。ApplicationオブジェクトのStatusBarプロパティを使えば、簡単にステータスバーに文字を表示することができます。
使い方:
Application.StatucBar = 表示する文字列
ステータスバーを使って進捗状況を表示するサンプルを用意しました。
サンプルコード:
Sub Test() Application.StatusBar = "進捗状況(50%):■■■■■□□□□□" End Sub
このように、簡単に進捗状況を表示できます。
方法2:プログレスバーに表示する
ただ、ステータスバーだとExcelの左下に表示されるため、表示していることに気づかない方も多いですよね。そのため、プログレスバーに表示する方法を覚えておくのがおすすめです!
プログレスバーはユーザーフォームというExcelの画面を用意して、画面にプログレスバーを配置して作っていきます。作り方についてわかりやすく解説するために、以下のようなプログレスバーを作る方法について解説します。
手順1:ユーザーフォームでExcelの画面を用意
まずは、Excelで画面を表示するためのユーザーフォームを用意します。「挿入タブ → ユーザーフォーム」を選択して、ユーザーフォームを追加します。
追加すると、次のようなユーザーフォームの画面が表示されます。
手順2:プログレスバーコントロールを追加
次に、プログレスバーを表示するためのコントロール追加方法について解説します。プログレスバーコントロールの追加方法は、次のとおりです。
1. ツールボックスのコントロールで右クリックし、その他のコントロールをクリック
2. 「Microsoft ProgressBar Control version X.X」にチェックを入れてOKボタンをクリック
追加すると、次のようにプログレスバーのコントロールがツールボックスに表示されます。
手順3:ユーザーフォームにプログレスバーを配置
次に、プログレスバーをユーザーフォームに配置する方法について解説します。ツールボックスからプログレスバーを選択し、ユーザーフォームの上でドラッグして配置します。
手順4:ラベルでメッセージを追加
次に、ラベルの使い方について解説します。プログレスバーだけでは何をしているのかわかりづらいので、メッセージで補足説明を入れるイメージですね。
F2キーを押すと表示名を変更できるので、「処理実行中です。」に変更します。
手順5:画面の初期化処理でプログレスバーの値を設定
次に、プログレスバーの初期設定をする方法について解説します。ユーザーフォームは画面を表示する前に必ず「UserForm_Initialize」の処理が実行されるので、「UserForm_Initialize」の処理でプログレスバーの最小値、最大値、値を設定するコードを入れます。
1. ユーザーフォームを右クリックしてコードを表示
2. コード内に最大値・最小値・値を設定する以下コードを書く
Private Sub UserForm_Initialize() '最大値と最小値を設定 ProgressBar1.Min = 0 ProgressBar1.Max = 100 '表示する値を設定 ProgressBar1.Value = 50 End Sub
これで設定が完了です。ユーザーフォームを実行すると、次のような画面が表示されます。
今回は、画面の初期化処理で「ProgressBar1.Value = 50」を入れて50%の状態を表示していますが、この値を処理によって変えていくことで、進捗状況を更新しつつ表示することができます。
処理を高速化するためのテクニック
今回解説したプログレスバーはとてもおすすめなのですが、処理の速度が速くなれば進捗状況を表示する必要はないですよね。
複雑な処理でどうしても時間がかかってしまう場合は仕方ないと思いますが、『高速化のテクニックを取り入れる→それでも時間がかかってしまう場合はプログレスバーを表示』の流れで作っていくのがおすすめです!
処理を高速化するテクニックについて以下で詳しくまとめているので、高速化を意識したことがない方は見てみるのがおすすめです!
合わせて覚えると便利なユーザーフォームの使い方
プログレスバーのサンプルで解説したユーザーフォームは、他にも便利な機能が多いです。今回のように表示するための画面以外にも、入力フォームとしての使い方もあります。
応用するとちょっとした便利ツールから、本格的な業務システムまで幅広いツールを作れるようになります。ユーザーフォームについては以下で詳しく解説しているので、気になる方は見てみてくださいね!
まとめ
今回は、処理の進捗状況を確認するためのプログレスバーの使い方について解説しました。時間がかかってしまう処理で進捗状況がわからないと、ユーザに不安な印象を与えてしまいがちです。ユーザへのちょっとした配慮でツールの良し悪しは変わってくるので、ぜひ使ってみてくださいね!