教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA フォーム&コントロール】ラベルを利用して処理の進捗状況を表示する方法を教えて!

内容

フォームに設置したラベルを利用して、処理の進行状況を表示するプログレスバーを作成します。フォームにラベルを2つ配置し、そのうちの1つ(Label1)は、処理の進行に合わせて右方向へ伸びて行くプログレスバーとし、もう一方(Label2)は、プログレスバーの外枠と数値による%表示として使用します。開始ボタン(CommandButton1)をクリックすると処理が表示され、処理状況が100%に達すると処理終了のメッセージを表示します。

プログラミング例

以下の手順に従って、Excel VBAフォーム上にプログレスバーを作成し、処理の進行状況を表示します。

1.VBA フォームの作成

デベロッパー タブを表示し、「挿入」ボタンをクリックしてUserFormを挿入します。

2.ラベルの配置

フォーム上に2つのラベル(Label1、Label2)を配置します。Label1はプログレスバー本体、Label2は外枠と%表示のためです。

3.開始ボタンの配置

フォーム上にコマンドボタン(CommandButton1)を配置します。これをクリックすると処理が開始されます。

4.VBA コードの追加

UserFormのコードモジュールに以下のコードを追加します。

Dim myAddWidth As Double

Private Sub UserForm_Initialize()
    myAddWidth = Label1.Width / 100
    Label1.Width = 0
End Sub

Private Sub CommandButton1_Click()
    Dim i As Long
    For i = 1 To 100
        Application.Wait Now() + TimeValue("00:00:01")
        Label1.Width = Label1.Width + myAddWidth
        Label2.Caption = i & "%"
        ' 画面の再描画を行う
        DoEvents
    Next i
    MsgBox "処理が完了しました!", vbInformation, "完了"
End Sub

5.プログレスバーの更新

上記のコードでは、CommandButton1_Click サブルーチンが開始ボタンのクリック時に実行されます。処理が進行するにつれて、ProgressValue 変数を更新し、UpdateProgressBar サブルーチンでプログレスバーを更新します。また、処理が完了した後には ResetProgressBar サブルーチンでプログレスバーをリセットします。