今回は、EXCEL VBAを使ってプログレスバーを作成する手順についてご紹介致します。
プログレスバーとは、パソコンを利用する上で度々目にするアレです。
![](http://harunnium.net/wp-content/uploads/2017/04/progresssample-300x154.png)
ダウンロードおよびインストールなどで、目にされる事が多いかなと思います。EXCEL VBAでもこのプログレスバーが作成できます。
プログレスバーのメリットは、処理の進捗状況が視認できるので、フリーズの誤認なども防げます。
また、全容が把握できるので、待ち時間に他の事ができるのもメリットと言えるでしょう。
フォームを作る
まずは、プログレスバーのウィンドウを作ります。
VBEを開き、「VBAPriject」や「Microsoft Excel objects」を選択し、右クリックを押下します。
すると、下図のメニューが開きますので、「挿入」「ユーザーフォーム」の順番に選択します。
![](http://harunnium.net/wp-content/uploads/2017/04/progress01-300x183.png)
新規のフォームが作られます。
![](http://harunnium.net/wp-content/uploads/2017/04/progress03_-300x218.png)
上からラベル、プログレスバー、コマンドボタンを設置します。
![](http://harunnium.net/wp-content/uploads/2017/04/progress05-300x159.png)
設置したコントロールのサイズや配置を調整します。
![](http://harunnium.net/wp-content/uploads/2017/04/progress06_-300x217.png)
こんな形になりました。
フォームのサイズやコントロールの幅はお好みで調整してください。
コーディング
次は、EXCEL VBAのプログラムを書いていきます。
プログレスバーのフォームのコーディング
'キャンセルフラグ
Public CancelFlg As Boolean
'キャンセルボタンの処理
Private Sub CancelBtn_Click()
'キャンセルフラグ
CancelFlg = True
End Sub
'フォームの初期処理
Private Sub UserForm_Initialize()
CancelFlg = False
End Sub
フォーム内のコーディングは、キャンセルボタンの処理です。
処理を行うシートのコーディング
次に、処理を行うシート内部にプレグレスバーを制御する処理を入れていきます。
ポイントは、①表示と②制御です。
①表示では、プログレスバーを定義して、最小値と最大値を設定します。
また、処理の内部でプログレスバーを表示し、終わりでプログレスバーを消すという処理も行います。
②制御では、処理内部でプログレスバーのゲージを増やすことと、キャンセルボタンが押されたかを監視し、押されたら処理を中断する処理も含みます。
サンプルコードは以下になります。
'プログレスバーのサンプルボタン処理
Private Sub CommandButton1_Click()
'①プログレスバーの定義
'※最大値は3000固定にしてあります。シート数や行数など適切な値を設定しましょう
UserForm1.Show vbModeless
UserForm1.ProgressBar1.Min = 1
UserForm1.ProgressBar1.Max = 3000
UserForm1.ProgressBar1.Value = 1
UserForm1.Caption = "プログレスバー サンプル"
'サンプル処理のループ
For i = 1 To 3000
'②プログレスバー制御処理
'プログレスバーのLabel表示を更新
UserForm1.Label1.Caption = "処理中…(" & i & "件 " & 3000 & "件中)"
'プログレスバーの最小値と最大値の間のみゲージの更新をします
If UserForm1.ProgressBar1.Min < i And _
UserForm1.ProgressBar1.Max >= i Then
'プログレスバーの値を更新
UserForm1.ProgressBar1.Value = i
'滞留処理を実行
DoEvents
End If
'②キャンセル制御処理
'キャンセルボタンが押されたら処理を中断し、処理を消します。
If UserForm1.IsCancel = True Then
'プログレスバーFormを閉じる
Unload UserForm1
MsgBox "プログレスバー サンプル を中断しました。"
Exit Sub
End If
Next i
'①プログレスバーの表示を消します。
Unload UserForm1
MsgBox ("サンプル処理 完了")
End Sub
慣れてくるとフォームとプログラムのベースを作成して、コピーして使いまわすこともできます。
また、プログレスバーの最大値について、特定のシートの最終行を設定する場合には、以下の記事も活用してみてください。
![](https://harunnium.net/wp-content/uploads/2017/09/エクセルのロゴ風無料アイコン-2.png)