【ExcelVBA入門】進捗状況をプログレスバーで確認する方法を徹底解説

こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。

皆さんは、VBAでマクロの進捗状況を確認する方法を知っていますか?プログレスバーを使えば、お手軽に処理の進捗状況を確認することができます!そこで今回は、

  • 進捗状況を確認するための2つの方法
  • プログレスバーの使い方
  • プログレスバーを使った具体的なサンプルコード
  • 合わせて覚えておくと便利なユーザーフォームの作り方

といった基礎的なことから、応用的な方法まで、徹底的に解説します!

マクロの進捗状況を表示する理由とは

はじめに、進捗状況を表示する理由について簡単に解説します。「Sheet1シートのデータをコピーして、Sheet2シートに貼り付ける」のように、シンプルな処理の場合はいらないのですが、次のように処理が長い場合はマクロの処理が終わるまで時間がかかってしまいます。

  • 処理1:請求データのリストをCSVファイルからインポート
  • 処理2:インポートした請求データのリスト数分、請求書をPDFで自動作成
  • 処理3:請求データ一覧シートの請求書出力フラグを更新して処理終了

処理開始のボタンを押してから数十秒時間がかかる場合、処理を実行している人は

あれ?処理は動いているのかな・・・?バグで処理が止まっているんじゃ・・・

と不安に思ってしまいます。そのため、「どこまで処理が進んでいるか」を伝えるために、進捗状況を表示するのがおすすめです。

マクロの進捗状況を表示する2つの方法

次に、マクロの進捗状況を表示する方法について解説します。進捗状況を表示する方法は2つあります。

方法1:ステータスバーに表示する

まずは、ステータスバーに表示する方法を解説します。ステータスバーはExcelの左下にある、メッセージを表示するエリアのことです。ApplicationオブジェクトのStatusBarプロパティを使えば、簡単にステータスバーに文字を表示することができます。

使い方:

ステータスバーを使って進捗状況を表示するサンプルを用意しました。

サンプルコード:

画像:実行結果

このように、簡単に進捗状況を表示できます。

方法2:プログレスバーに表示する

ただ、ステータスバーだとExcelの左下に表示されるため、表示していることに気づかない方も多いですよね。そのため、プログレスバーに表示する方法を覚えておくのがおすすめです!

プログレスバーはユーザーフォームというExcelの画面を用意して、画面にプログレスバーを配置して作っていきます。作り方についてわかりやすく解説するために、以下のようなプログレスバーを作る方法について解説します。

画像:UserForm1

手順1:ユーザーフォームでExcelの画面を用意

まずは、Excelで画面を表示するためのユーザーフォームを用意します。「挿入タブ → ユーザーフォーム」を選択して、ユーザーフォームを追加します。

画像:手順1

追加すると、次のようなユーザーフォームの画面が表示されます。

画像:ユーザーフォーム

手順2:プログレスバーコントロールを追加

次に、プログレスバーを表示するためのコントロール追加方法について解説します。プログレスバーコントロールの追加方法は、次のとおりです。

1. ツールボックスのコントロールで右クリックし、その他のコントロールをクリック

画像:ツールボックス

2. 「Microsoft ProgressBar Control version X.X」にチェックを入れてOKボタンをクリック

画像:コントロールの追加

追加すると、次のようにプログレスバーのコントロールがツールボックスに表示されます。

画像:ツールボックス

手順3:ユーザーフォームにプログレスバーを配置

次に、プログレスバーをユーザーフォームに配置する方法について解説します。ツールボックスからプログレスバーを選択し、ユーザーフォームの上でドラッグして配置します。

画像:サイズをドラッグして指定

画像:プログレスバー設置

手順4:ラベルでメッセージを追加

次に、ラベルの使い方について解説します。プログレスバーだけでは何をしているのかわかりづらいので、メッセージで補足説明を入れるイメージですね。

画像:ラベルの追加

F2キーを押すと表示名を変更できるので、「処理実行中です。」に変更します。

画像:表示名の変更

手順5:画面の初期化処理でプログレスバーの値を設定

次に、プログレスバーの初期設定をする方法について解説します。ユーザーフォームは画面を表示する前に必ず「UserForm_Initialize」の処理が実行されるので、「UserForm_Initialize」の処理でプログレスバーの最小値、最大値、値を設定するコードを入れます。

1. ユーザーフォームを右クリックしてコードを表示

画像:コードを表示

2. コード内に最大値・最小値・値を設定する以下コードを書く

これで設定が完了です。ユーザーフォームを実行すると、次のような画面が表示されます。

画像:ユーザーフォームを実行

今回は、画面の初期化処理で「ProgressBar1.Value = 50」を入れて50%の状態を表示していますが、この値を処理によって変えていくことで、進捗状況を更新しつつ表示することができます。

処理を高速化するためのテクニック

今回解説したプログレスバーはとてもおすすめなのですが、処理の速度が速くなれば進捗状況を表示する必要はないですよね。

複雑な処理でどうしても時間がかかってしまう場合は仕方ないと思いますが、『高速化のテクニックを取り入れる→それでも時間がかかってしまう場合はプログレスバーを表示』の流れで作っていくのがおすすめです!

処理を高速化するテクニックについて以下で詳しくまとめているので、高速化を意識したことがない方は見てみるのがおすすめです!

【ExcelVBA入門】処理の実行時間を高速化する方法を徹底解説!
更新日 : 2018年8月29日

合わせて覚えると便利なユーザーフォームの使い方

プログレスバーのサンプルで解説したユーザーフォームは、他にも便利な機能が多いです。今回のように表示するための画面以外にも、入力フォームとしての使い方もあります。

画像:【サンプル】タスク登録画面

応用するとちょっとした便利ツールから、本格的な業務システムまで幅広いツールを作れるようになります。ユーザーフォームについては以下で詳しく解説しているので、気になる方は見てみてくださいね!


【ExcelVBA入門】ユーザフォームでテキストボックスを使う方法とは
更新日 : 2019年5月8日

【ExcelVBA入門】ユーザフォームでチェックボックスを使う方法とは
更新日 : 2018年8月8日

まとめ

今回は、処理の進捗状況を確認するためのプログレスバーの使い方について解説しました。時間がかかってしまう処理で進捗状況がわからないと、ユーザに不安な印象を与えてしまいがちです。ユーザへのちょっとした配慮でツールの良し悪しは変わってくるので、ぜひ使ってみてくださいね!

LINEで送る
Pocket

最短でエンジニアを目指すなら侍エンジニア塾

cta_under_bnr

侍エンジニア塾は業界で初めてマンツーマンレッスンを始めたプログラミングスクールです。これまでの指導実績は16,000名を超え、未経験から数多くのエンジニアを輩出しています。

あなたの目的に合わせてカリキュラムを作成し、現役エンジニア講師が専属であなたの学習をサポートするため効率よく学習を進めることができますよ。

無理な勧誘などは一切ありません。まずは無料体験レッスンを受講ください。

無料体験レッスンの詳細はこちら

書いた人

Sanshiro Wakizaka

Sanshiro Wakizaka

フリーランスエンジニア兼ライターのワキザカ サンシロウです。
ExcelVBAの自動化ツール開発、WEB開発をメインにエンジニア業務をこなしつつ、サムライエンジニアにてライター業務をしております。

プログラミングをこれからやってみたい方に向けて、ためになる記事を全力で書いていきますので宜しくお願い致します!

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説