HOME > 即効テクニック > Excel VBA > その他関連のテクニック > ステータスバーにメッセージを表示する

即効テクニック

その他関連のテクニック

ステータスバーにメッセージを表示する

( - )
●詳細● 
サンプルでは、マクロの実行状況をステータスバーに表示しています。サンプル内容は、マクロのあるブックをアクティブにしてセルをコピーしたら、新規に追加したブックをアクティブにして貼り付ける、を繰り返します。そして、画面の表示を動かした場合と、画面の表示を固定した場合で、ステータスバーのメッセージを変えています。画面の表示を動かした場合は、2つのブックが交互に表示されるので、画面がめまぐるしく動きます。そして、ステータスバーには、画面の状態が固定されていないことと処理状況が表示されます。 画面の表示を停止させた場合は、新規ブックのシート2が表示されたままで動きません。そして、やはりステータスバーには、画面が固定されていることと処理状況が表示されます。 画面の動きと、処理結果が分かりやすいように、マクロのあるブックのシートに一時的に色を付けているので、画面の表示が動く時と停止している時で、貼り付け結果の色が違います。

●準備● 
新規ブックにサンプルマクロを貼り付けてください。 

●サンプル● 

Sub sample() 
    Dim myWB As Workbook 
    Dim newWB As Workbook 
    Dim myState(2) As String 
    Dim myBar As Boolean 
    Dim i, j As Integer 

    '<画面の動きを配列にセットします。> 
    '<画面が動きます。> 
    myState(1) = "True" 

    '<画面の動きを止めます。> 
    myState(2) = "False" 

    '<マクロのあるブックを取得します。> 
    Set myWB = ThisWorkbook 

    '<新規ブックを取得します。> 
    Set newWB = Workbooks.Add '←(1) 

    '<ステータスバーの状態を保存します。> 
    myBar = Application.DisplayStatusBar '←(2) 

    '<ステータスバーを表示します。> 
    Application.DisplayStatusBar = True 

    MsgBox "画面とステータスバーを見ていてくださいね。" 

    '<画面の動きがある場合と停止させた場合の確認をし、 
    '画面の状態をステータスバーに表示します。> 
    For i = 1 To 2 '←(3) 

      '<動きが分かりやすいようにシートに色を付けます。> 
      myWB.Activate 
      Worksheets(1).Activate 

      '<全てのセルを選択します。> 
      Cells.Select 

      '<内部を塗りつぶす色を指定します。> 
      Selection.Interior.ColorIndex = 34 + i '←(4) 

      newWB.Activate 
      Worksheets(i).Activate 

      '<画面の動きを止めるかどうかセットします。> 
      Application.ScreenUpdating = myState(i) '←(5) 

      '<マクロのあるシートのA1〜A10のセル内容をコピーして 
      '新規ブックの1枚目のシートのB1〜B10へ貼り付けます。> 
      For j = 1 To 10 

          '<ステータスバーにメッセージを表示します。> 
        If i = 1 Then '←(6) 
          Application.StatusBar = "画面は動いています。・・・" _ 
           & j & "行目コピー中(新規ブックのシート1へ)" 
        Else 
          Application.StatusBar = "画面の動きを止めました。・・・" _ 
          & j & "行目コピー中(新規ブックのシート2へ)" 
        End If 

        '<マクロのあるシートをコピーします。> 
        myWB.Activate 
        Worksheets(1).Activate 
        Range("A" & j).Select 
        Selection.Copy 

        '<1秒間マクロを中止します。> 
        Application.Wait (Now + TimeValue("00:00:01")) '←(7) 

        '<新規シートへ貼り付けます。> 
        newWB.Activate 
        Worksheets(i).Activate 
        Range("B" & j).Select 
        ActiveSheet.Paste 

        '<1秒間マクロを中止します。> 
        Application.Wait (Now + TimeValue("00:00:01")) 

      Next j 

    Next i 

    '<マクロのあるブックのシートの色を元に戻します。> 
    myWB.Activate 
    Worksheets(1).Activate 
    Cells.Select 
    Selection.Interior.ColorIndex = xlNone 
    Range("A1").Select 

    '<新規ブックのシート1をアクティブにします。> 
    newWB.Activate 
    Worksheets(1).Activate 

    '<ステータスバーの表示内容をExcelの規定値に戻す。> 
    Application.StatusBar = False '←(8) 

    '<ツールバーを元に戻します。> 
    Application.DisplayStatusBar = myBar 

    '<画面の動きを解除します。> 
    Application.ScreenUpdating = True 

    MsgBox "新規ブックのシート1とシート2を確認してください。" 

End Sub 

●補足説明● 
  1. Addメソッドは、新しいブックを作成します。そして、新しいブックが作業中 のブックになります。
  2. DisplayStatusBarプロパティは、ステータスバーの値の取得と設定ができます。 Trueでステータスバーを表示します。
  3. 「For〜Next」ステートメントは、指定された回数分、処理を繰り返します。 <構文> For x = i To y (処理) Next x x:繰り返す回数をカウントする数値変数を指定します。 i:初期値をセットします。 y:繰り返す回数(最終値)をセットします。 Nextステートメントでxに1加算され、再び処理を繰り返します。
  4. ColorIndexプロパティは、セル内部の塗りつぶしなどに適用する色を設定します。 色は、現在のカラーパレットのインデックス、または定数で表します。 現在のカラーパレットを返すには、Colorsプロパティを使ってください。
  5. ScreenUpdatingプロパティは、マクロの実行中に画面表示を更新する(True)・ 更新しない(False)を設定します。ブール型 (Boolean) の値を使用します。 画面を更新しないと、マクロの処理過程は見ることができませんが、マクロの実行 速度が向上します。 マクロが終了したら、ScreenUpdatingプロパティの値をTrueに戻します。  *ブール型 (Boolean)  ブール型 (Boolean) の変数は、16 ビット(2バイト) の変数です。  ブール型変数が格納できる値は、真(True)または偽(False)だけです。
  6. StatusBarプロパティに、任意の文字列を代入してメッセージを表示します。
  7. 実行中のマクロを指定の時刻まで停止します。指定の時間に達した場合、Trueを 返します。
  8. Wait メソッドは、Excel のすべての動作を停止させますが、印刷や再計算などの バックグラウンド処理は続行されます。  *Now関数・・・コンピュータのシステムの日付と時刻の設定に基づいて、現在の  日付と時刻を表すバリアント型 (内部処理形式 Date の Variant)の値を返します。  *TimeValue関数・・・時刻を表すバリアント型 (内部処理形式 Date の Variant)の  値を返します。  <構文> TimeValue(time)  引数 time は必ず指定します。引数 time には、通常 0:00:00 (12:00:00  AM)〜23:59:59 (11:59:59 PM) の範囲の時刻を表す文字列式を指定します。
  9. Excel側でステータス バーを制御しているとき、このプロパティは False を返します。 ステータスバーの文字列を既定値に戻すには、プロパティに Falseを設定します。