Developer

【ExcelVBA】ウォッチウィンドウ2
2021.02.26
Lv1

【ExcelVBA】ウォッチウィンドウ2

ウォッチウィンドウ

前回に引き続きウォッチウィンドウの使い方を紹介していきます。

ウォッチウィンドウの使い方は3つです。
・リアルタイムに変数やプロパティの値を監視する
・特定の条件のときにマクロの実行を一時停止する
・変数やプロパティの値が変化したときに一時停止する

今回は「特定条件の時にマクロの実行を一時停止する」と「変数やプロパティの値が変化したときに一時停止する」を紹介していきます。

プログラムは基本的には前回と同じものですが、ランダムに生成した値を出力する「Debug.Print」を1行追加している点が異なっています。

Sub VBA基礎第17回_1()
    Dim i As Integer
    Dim x As Integer
    Dim sum As Integer
    
    '' 合計値を保持する変数
    sum = 0
    For i = 0 To 4
        '' 0~9までのランダムな数値を生成
        x = Int(Rnd * 10)
        
        Debug.Print "今回のxの値:" & x
        
        '' 合計値を更新
        sum = sum + x
    Next
    
    '' 結果を出力
    Debug.Print "0から9までのランダム値を5回合計した値:" & sum
End Sub

では、実行してみましょう。

017-001

実行結果は毎回変化します。この画像の例では、ランダムで生成された値が「7、0、7、8、7」となっていることがわかります。
5個の数値の合計が「29」となるので、最後にこの数値が出力されています。

もう少し処理の流れを見てみましょう。

まずは、変数「sum」に「0」を代入します。このような処理を一般的には「初期化」と言います。

「sum」の初期化が終わるとループの1回目(i=0の回)の実行が始まります。変数「x」の値がランダムに生成され、今回は「7」となります。

「Debug.Print」ステートメントでこの変数[x」の値がイミディエイトウィンドウに出力されます。

変数「x」の値は変数「sum」へ足しこまれます。変数「sum」はもともと「0」でしたので、これで値は「7」となります。
これで1回目(i=0)のループは終了し、2回目(i=1)のループになります。

再度、変数「x」の値がランダムに生成されます。今回は「0」となります。

「Debug.Print」ステートメントでこの変数[x」の値がイミディエイトウィンドウに出力されます。1回目のループの結果の下に今回の結果「0」が出力されます。

再度、変数「x」の値は変数「sum」へ足しこまれます。変数「sum」はもともと「7」でしたので、これで値は「7」となります。
このように順次処理が行われていきます。

特定条件の時にマクロの実行を一時停止する

まずは、使い方の2つ目「特定条件の時にマクロの実行を一時停止する」を試してみましょう。プロシージャ内のどこでも構わないので右クリック→「ウォッチ式の追加」をクリックしましょう。

前回ウォッチ式を追加したときと同じようにウィンドウが表示されますので、赤アンダーラインの2か所を変更します。

017-002

式の欄に「sum>10」を入力します。ウォッチの種類の欄は「式がTrueのときに中断」を選択します。
これで、この条件を満たす(Trueになった)ときにマクロの実行が一時停止するようになります。あたかもブレークポイントを設定したときのように黄色の網掛けになります。
では、「OK」をクリックしてウォッチ式が追加されたことを確認したらマクロを実行してみましょう。

実行するたびに結果は変化しますが、次のプログラムを実行することで変数「sum」の値が変化しますので、この値が10を超えるとウォッチ式で設定した条件を満たし、そこでマクロの実行が一時停止します。

017-003

実際に一時停止している(黄色の網掛けとなっている)行は次の行ですね。デバッグのところでも説明しましたが、網掛けになっている行は「まだ実行していないプログラム」になります。つまり、1行上のプログラムが実行された直後にプログラムが停止しています。

また、イミディエイトウィンドウを見ますと、変数「x」の値は「0」→「4」→「8」と変化していますので、「0 + 4 + 8」で10を超えたタイミングで一時停止したこともわかります。

ウォッチ式が設定したとおりに動作しましたので、「F5」キーを押下してマクロを継続実行しましょう。

017-004

イミディエイトウィンドウを見るとこのようにプログラムが最後まで実行されました。あくまでも設定した条件を満たした最初の1回のみマクロの実行が一時停止するということを抑えておいてください。

変数やプロパティの値が変化したときに一時停止する

上記では「条件を満たしたときに1度だけ一時停止にする」方法でしたが、次はその変数やプロパティの値が変化する度に一時停止する方法です。既に設定されているウォッチ式は削除しておきましょう。

017-005

プロシージャ内のどこでも構わないので右クリック→「ウォッチ式の追加」をクリックしましょう。
前回ウォッチ式を追加したときと同じようにウィンドウが表示されますので、赤アンダーラインの2か所を変更します。

式の欄に「sum」を入力します。ウォッチの種類の欄は「式の内容が変化したときに中断」を選択します。
これで、変数「sum」の値が変化したときにマクロの実行が一時停止するようになります。あたかもブレークポイントを設定したときのように黄色の網掛けになります。
では、「OK」をクリックしてウォッチ式が追加されたことを確認したらマクロを実行してみましょう。

017-006

マクロが一時停止したのは先ほどと同じ「Next」ステートメントの箇所です。変数「sum」の値が変化した直後ですね。
イミディエイトウィンドウを見ると「今回のxの値:9」と1行だけ出力されているため、ループの1回目であることがわかります。
(さきほどは、同じような出力が3行ありました。これは3回目のループで初めて一時停止したことを意味していますね。)
ウォッチ式の値をみると確かに値「9」が保存されていることがわかります。

まとめ

今回はウォッチウィンドウの3つの機能のうち残り2つについて紹介しました。
ブレークポイントを設定しなくても、特定の条件の時にマクロの実行を一時停止したり、ステップ実行を行いながら変数の値の変化を追いかけることが可能になりました。
とても強力なデバッグ機能ですのでうまく使いこなしていきたいところです。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

ウォッチウィンドウの使い方は3つです。
・リアルタイムに変数やプロパティの値を監視する
・○○○のときにマクロの実行を一時停止する
・変数やプロパティの値が○○したときに一時停止する

答え

ウォッチウィンドウの使い方は3つです。
・リアルタイムに変数やプロパティの値を監視する
「特定の条件」のときにマクロの実行を一時停止する
・変数やプロパティの値が「変化」したときに一時停止する

次回は、呼び出し履歴です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次