前回はExcel VBAエキスパートスタンダードの構造化参照について勉強しました。
前回までの記事はこちら
今回は10章のデバッグについてレポートしていきます。
「デバッグはわかるけど各ウィンドウをどうやって使うの?」、「デバッグでよく使うものは?」といったことをわかりやすく説明したいと思います。
なお理解が間違っているところもあるかもしれませんがわからない人と同じ視点に立てるのは今しかないので細かいところはご容赦ください。
間違えに気づいたら修正していきます(笑)。
<今回の目的>
デバッグ処理について理解する
-
10章を精読する
-
デバッグの際に使う4つのウィンドウについてできる限りわかりやすく説明する
- デバッグの際によく使う関数について説明する
結論
いきなりですが結論です。
コードウィンドウ、イミディエイトウィンドウ、ローカルウィンドウ、ウォッチウィンドウはマクロが中断したタイミングで使う
デバッグ時はValueやTextプロパティ、各関数を使って変数の中身を調べるとよい
次から詳しく説明します。
今回躓いた部分
マクロを触り始めた際に最初に疑問を持ったのがコードウィンドウ以外の存在でした。
以下がそれぞれのウィンドウ名になりますがどのタイミングでこの4つのウィンドウを使うのかがよくわかっていませんでした
また最初はそれぞれの特徴や役割もわかっていなかったので今回改めて説明しようと思います。
(なお表示されていない場合は表示タブからそれぞれのウィンドウを表示させることができます)
ウィンドウを使うタイミング
これらウィンドウは基本マクロを中断させたタイミングで使います(イミディエイトウィンドウはいつでも使えるので厳密には異なります)。つまりマクロの開始前、終了後には使えません。
なぜなら実行中に使用していた変数などの値はマクロ終了後に消えてしまうからです。
マクロが中断するタイミングは大きく以下になります。
- エラーが出た場合
- Stopステートメントで途中で止めた場合
- ブレークポイントで停止した場合
- ステップ実行を使用した場合
これらのウィンドウはこの中断時において変数やプロパティの値などを調べるのに使います。
ウィンドウの表示例
以下は別で行っているスクレイピングのコードを途中で止めた際の図です。
色々と表示されていることが分かります。次から説明します。
それぞれのウィンドウの特徴と役割
コードウィンドウ
VBAのコードを実際に書くウィンドウです。エラー時は該当のコードが黄色く表示されます。
中断時に変数にマウスを持っていくと変数に格納されている値を確認することができます。
中断時変数の値をすぐに調べたいときに使います。
イミディエイトウィンドウ
コードを入力することで値の取得などができるウィンドウです。コードの使い方によっては変数の値を取得するだけではなくいろいろな操作ができます。
?の後に続けて変数名やプロパティ名を入力すると、変数の値や関数の計算値を取得することができます。コード上にDebug.Print 〇〇と記載することでイミディエイトウィンドウ上に変数の値などを出力させることができます。
また簡単なコードであればこのウィンドウ内で行うことも可能です。
こちらは実際にコードを入力して変数の値や関数の戻り値を取得したい際に使います。
ローカルウィンドウ
プログラムで使用される全変数の値やプロパティを調べるためのウィンドウです。
すべての変数やプロパティなどを把握したいときに使います。
ウォッチウィンドウ
自分が指定した変数の値を調べるためのウィンドウです。
変数にマウスを持っていってドラッグでウィンドウに入れることができます。
変数が多すぎてローカルウィンドウでは大変な場合や特定の変数のみを見たい場合に使います。
デバッグでよく使うプロパティ, 関数
Value, Textプロパティ
変数内の値や文字列を調べる際に使います。なおこれらはコードウィンドウだけではなく前段のイミディエイトウィンドウでも使えます。
TypeName関数
TypeName(変数)で変数の型を返します。
TypeName(Range(“A1”)はRange、TypeName(Range(“A1”).Value)はセルに入力されている形式によりStringやInteger等が返ります。
Is関数
IsDate(値)で値が日付かどうかの結果を返します。Yesの場合はTrue、Noの場合はFalseを返します。
IsNumeric(値)で値が数値かどうかの結果を返します。Yesの場合はTrue、Noの場合はFalseを返します。
あとはIsObject関数などもあります。
ここでのまとめ
コードウィンドウ、イミディエイトウィンドウ、ローカルウィンドウ、ウォッチウィンドウはマクロが中断したタイミングで使う
デバッグ時はValueやTextプロパティ、各関数を使って変数の中身を調べるとよい
デバッグ時は色々なウィンドウを使うことができます。これらを使い分けてデバッグ処理が円滑に進むようになれば良いなと思います。
コメント