Excel でユーザー フォームを使用して進行状況バーを表示する方法

概要

完了に時間がかかる Microsoft Visual Basic for Applications マクロがある場合は、マクロが正しく進行していることをユーザーに示す必要があります。 この記事では、Microsoft Excel でユーザー フォームを使用して進行状況バーを作成する方法について説明します。

詳細情報

Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 Microsoft のサポート エンジニアが、特定の手順の機能をわかりやすく説明します。 ユーザー固有の要件に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。

ユーザー フォームを作成する

次の例では、Visual Basic サブルーチンは、ランダムな数値を持つセルの広い範囲を設定します。 このインジケーターは、マクロが正しく実行されていることを示します。

  1. Excel で新しいブックを開きます。

  2. Microsoft Office Excel 2003 以前のバージョンの Excel では、[ ツール] をクリックし、[ マクロ] をポイントして、[ Visual Basic エディター] をクリックします。

    Microsoft Office Excel 2007 で、[開発] タブの [コード] グループで [Visual Basic] をクリックします。

    メモ リボンに [ 開発 ] タブを表示するには、次の手順に従います。

    1. Excel 2007 を起動し、 Microsoft Office ボタンをクリックして、[ Excel オプション] をクリックします。
    2. [Excel オプション] ダイアログ ボックスで[人気] をクリックし、[リボン] チェック ボックスの [開発者の表示] タブをクリックして選択します。
  3. [挿入] メニューの [UserForm] をクリックします。

  4. ユーザー フォームに Label コントロールを描画します。

  5. Label コントロールの次のプロパティを次の値に変更します:|プロパティ|値| |---------------|-----------------------------| |キャプション|今すぐ更新します。 お待ちください...|メモ[プロパティ] ウィンドウが表示されない場合は、[表示] メニューの [プロパティ] ウィンドウをクリックします。

  6. ユーザー フォームに Frame コントロールを描画します。

  7. Frame コントロールの次のプロパティを次の値に変更します:|プロパティ |値| |---------|--------------------| |FrameProgress という名前を付けます|

  8. Frame コントロールに Label コントロールを描画します。

  9. Label コントロールの次のプロパティを次の値に変更します:|プロパティ|値| |----------|---------------------------| |名前|LabelProgresss| |BackColor |&H000000FF&| |SpecialEffect |fmSpecialEffectRaised|

マクロ コードを入力する

  1. ユーザー フォームをダブルクリックして、ユーザー フォームの [コード ] ウィンドウを開きます。

  2. モジュールで、 UserForm_Activate イベントの次のコードを入力します。

    Private Sub UserForm_Activate()
        ' Set the width of the progress bar to 0.
        UserForm1.LabelProgress.Width = 0
    
    ' Call the main subroutine.
        Call Main
    End Sub
    
    
  3. [挿入] メニューの [モジュール] をクリックします。

  4. モジュールの [ コード ] ウィンドウで、次のコードを入力します。

    Sub ShowUserForm()
        UserForm1.Show
    End Sub
    
    Sub Main()
        Dim Counter As Integer
        Dim RowMax As Integer, ColMax As Integer
        Dim r As Integer, c As Integer
        Dim PctDone As Single
    
    Application.ScreenUpdating = False
        ' Initialize variables.
        Counter = 1
        RowMax = 100
        ColMax = 25
    
    ' Loop through cells.
        For r = 1 To RowMax
            For c = 1 To ColMax
                'Put a random number in a cell
                Cells(r, c) = Int(Rnd * 1000)
                Counter = Counter + 1
            Next c
    
    ' Update the percentage completed.
            PctDone = Counter / (RowMax * ColMax)
    
    ' Call subroutine that updates the progress bar.
            UpdateProgressBar PctDone
        Next r
        ' The task is finished, so unload the UserForm.
        Unload UserForm1
    End Sub
    
    Sub UpdateProgressBar(PctDone As Single)
        With UserForm1
    
    ' Update the Caption property of the Frame control.
            .FrameProgress.Caption = Format(PctDone, "0%")
    
    ' Widen the Label control.
            .LabelProgress.Width = PctDone * _
                (.FrameProgress.Width - 10)
        End With
    
    ' The DoEvents allows the UserForm to update.
        DoEvents
    End Sub
    
    
  5. Excel に戻ります。

  6. Excel 2003 以前のバージョンの Excel では、[ツール] メニューの [マクロ] をポイントし、[マクロ] をクリックします。

    Excel 2007 で、[開発] タブの [コード] グループで [マクロ] をクリックします。

  7. [マクロ] ダイアログ ボックスで、ShowUserForm をクリックして選択し、[実行] をクリックします。

赤い進行状況バーがあるダイアログ ボックスが表示されます。 メイン サブルーチンがワークシート上のセルを設定すると、進行状況バーが増加します。

ShowUserForm サブルーチンには、ユーザー フォームが表示されます。 ユーザー フォームの Activate イベントにアタッチされているプロシージャは、 Main サブルーチンを呼び出します。 Main サブルーチンは、セルに乱数を設定します。 さらに、サブルーチンは、ユーザー フォームの Label コントロールを更新する UpdateProgressBar サブルーチンを呼び出します。

メモ この手法を使用すると、マクロの目的のタスクを完了するのに少し時間がかかります。