MENU

EXCELVBAでプログレスバーを作る

  • URLをコピーしました!

今回は、EXCEL VBAを使ってプログレスバーを作成する手順についてご紹介致します。

プログレスバーとは、パソコンを利用する上で度々目にするアレです。

ダウンロードおよびインストールなどで、目にされる事が多いかなと思います。EXCEL VBAでもこのプログレスバーが作成できます。

プログレスバーのメリットは、処理の進捗状況が視認できるので、フリーズの誤認なども防げます。

また、全容が把握できるので、待ち時間に他の事ができるのもメリットと言えるでしょう。

スポンサーリンク
目次

フォームを作る

まずは、プログレスバーのウィンドウを作ります。

VBEを開き、「VBAPriject」や「Microsoft Excel objects」を選択し、右クリックを押下します。

すると、下図のメニューが開きますので、「挿入」「ユーザーフォーム」の順番に選択します。

新規のフォームが作られます。

上からラベル、プログレスバー、コマンドボタンを設置します。

設置したコントロールのサイズや配置を調整します。

こんな形になりました。

フォームのサイズやコントロールの幅はお好みで調整してください。

コーディング

次は、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

慣れてくるとフォームとプログラムのベースを作成して、コピーして使いまわすこともできます。

また、プログレスバーの最大値について、特定のシートの最終行を設定する場合には、以下の記事も活用してみてください。

スポンサーリンク
よかったらシェアしてね!
  • URLをコピーしました!
目次