和風スパゲティのレシピ

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

ブレークポイントとStopステートメントの違い

ブレークポイントとStopステートメントの違いを解説します。

同じところ

どちらもマクロの実行を任意の位置で一時停止する機能です。

以下の2つのコードはどちらも、
「処理シートのSet直後、セル値の代入直前」
に一時停止します。

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

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

一時停止の仕様も完全に同じで、この後は

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

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

違うところ

まず1つ目の違いとして、ブックの保存時に記憶されるかが違います。

Stopステートメントはソースコードのため当然保存されますが、
ブレークポイントはブックを保存しても保存されません。


続いて2つ目の違いは、Stopステートメントは停止条件を設定できることです。

Stopステートメントは通常のコードと同様If文内に使用できるため、
以下のコードのように「条件を満たすとき一時停止」を簡単に設定できます。

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

 
一応ブレークポイントでも、

ブレークポイントによる条件停止

こんな風に空の実行行「:」を作れば条件停止を設定できますが、
ややトリッキーなためStopを使用した方が無難でしょう。


3つ目の違いはブレークポイントの設定の簡単さです。

1クリックまたはF9で設定できるブレークポイントの方が
ソースコードを記入する必要があるStopより気軽に設定できます。


また、保存されないというのもそれはそれで大きな長所で、
テスト完了後にわざわざ消して回らなくてもいいのはありがたいことが多いですね。

使い分け

ブレークポイントの設定の簡単さというメリットが大きいため、
条件なくただそこで止めたい場合はブレークポイントを使用すると良いです。


対して、「○○なら止める」と一時停止の条件を設定する場合は、
If ○○ Then Stop という記述が非常に使いやすいのでこちらを使いましょう。


あとはレアケースですが、マクロブック自体を開閉するマクロをテストする際は、
ブレークポイントの「保存できない」特性が欠点となります。

その際はStopステートメントを使用してください。