和風スパゲティのレシピ

日本語でコーディングするExcelVBA

マクロを一時停止する - ブレークポイント/Stop

マクロの実行を任意の行で一時停止させる方法を解説します。

ブレークポイントを使用する方法と、
Stopステートメントを使用する方法の2種類があります。

ブレークポイントでマクロを一時停止する

まずは設定が簡単な「ブレークポイント」から解説します。

ブレークポイントとは、↓の画像ののことで、

ブレークポイント

コードウィンドウの↓のあたりをマウスでクリックすることでつけ外しできます。

ブレークポイントの設定方法

ショートカットキー「F9」でもつけ外しできますので覚えてしまいましょう。


この「ブレークポイント」を設定した状態でマクロを実行すると、
以下のように「設定行の実行直前でマクロが一時停止」します。

ブレークポイントによる一時停止


これはエラー時に表示される

エラー画面サンプル

このウィンドウで「デバッグ」を選択したときと同じ挙動だと思ってください。


「デバッグ」で一時停止させた時と同様、この状態から

  • 「F8:ステップ実行」で1行ずつコードを実行していく
  • 状況を確認し問題なければ「F5:実行」でマクロの一括実行に戻る
  • マクロのリセット(上部の停止■ボタン)で実行を中止する

いずれかの方法でマクロを再開・あるいは停止することができます。


ちなみにこのブレークポイントはVBE(コード入力画面)を開いていなくても実行され、
その時はVBEを開いた上でコードを停止しその行を表示します。

この点でも「エラー発生 → デバッグを選択」と同じ仕様ですね。


またブレークポイントはブックを保存しても記憶されません。

次に開いたときはなくなっていますので、
開いている間だけの一時的な設定と言えます。

Stopステートメントでマクロを一時停止する

続いてStopステートメントの使い方を解説します。

Stopステートメントでマクロを一時停止する場合は以下のコードを実行します。

Sub マクロの一時停止テスト()
    
    Dim 処理シート As Worksheet
    Set 処理シート = ActiveSheet
    
    Stop
    
    処理シート.Range("A1").Value = 1
    
End Sub

 
このコードを実行すると、処理シートをSetした直後にVBEが開かれ、

Stopステートメントによる一時停止

この状態でマクロが一時停止します。


一時停止の仕様はブレークポイントと全く同じで、この状態から

  • 「F8:ステップ実行」で1行ずつコードを実行していく
  • 状況を確認し問題なければ「F5:実行」でマクロの一括実行に戻る
  • マクロのリセット(上部の停止■ボタン)で実行を中止する

いずれかの方法でマクロを再開・あるいは停止することができます。


Stopステートメントはブレークポイントと違ってコードに直接記入していますので、
この状態でブックを保存すれば、当然Stopステートメントも保存されます。

この仕様の違いは覚えておきましょう。

停止する条件を設定する - If ○○ Then Stop

上記コードで行ったStopステートメントの一時停止であれば、
1クリックで設定でき、後で消す必要もないブレークポイントの方が便利です。

Stopステートメントが真に力を発揮するのは、
以下のコードのように停止する条件を設定できる点です。

Sub データの全行を処理するマクロ()
    
    Dim 処理シート As Worksheet
    Set 処理シート = ActiveSheet
    
    Dim R As Long
    For R = 2 To 処理シート.UsedRange.Rows.Count + 処理シート.UsedRange - 1
    
        ' 32行目でストップする
        If R = 32 Then Stop
        
        ' 行ごとの処理サンプル
        処理シート.Cells(R, 1) = 1
        
    Next
    
End Sub

このコードのように、「If 条件 Then Stop」という簡単な記載で、
特定の条件を満たしたときだけマクロを一時停止させることができます。


これがデバッグ(バグ取り)作業において強力な効果を発揮し、

  • 怪しいデータが分かっている場合にその行で止める
  • 検索結果が""になったときに止める
  • 対象オブジェクトがNotiongになったら止める

などの検証を簡単に設定することができます。


怪しい箇所が分かった際、そこにたどり着くまでF8連打していた(私のような)方は、
是非ともStopステートメントを活用してみてください。

使い分け

前述の通りブレークポイントは1クリックで設定でき、後で消す必要もないため、
ただのStopステートメントよりはブレークポイントの方が便利なことが多いです。

このためStopステートメントは「If ○○ Then Stop」の形で使うことがほとんどで、

  • 1クリックで気軽に設定して使いたいときは「ブレークポイント」
  • 特定の条件のみ停止させたいときは「If ○○ Then Stop」

と使い分ければ良いと思います。


それ以外の用途としては、例えばブックの開閉が頻発するマクロブックを検証する際、
ブレークポイントでは閉じるたびに設定が消えてしまいます。

その際は設定を保存できるStopステートメントを使用してください。