🐥

【Excel VBA】初心者向け デバッグのやり方

に公開

備忘録も兼ねたいので今後も追記します。

はじめに

こんにちは、普段は社内SEとして大規模VBAの保守改修、開発等を行っております。
くらげと申します。
会社でいきなりVBAツールの保守を任されて、最初に困るのはやっぱりエラーの出方ではないでしょうか…。なんかおかしいのは教えてくれてるけど、この行がどうおかしいの!?と初心者のころは何百何千と思ったものです。(もうそろ3年目ですが今も初心者です)

そこで今回はVBAでデバッグするときの方法をまとめました。
VBAデバッグのやり方がわからない方の助けになればうれしいです。

実行エラーが出た!!

こういった実行エラー画面が出たら、デバッグをやってみましょう。
今はいったん「終了」を押して処理を止めます。

1.エラートラップを変更しよう


左上のツールタブから「オプション」を選択し、

エラートラップを「クラスモジュールで中断」にしておきましょう。
これが「エラー処理対象外のエラーで中断」になっているととってもデバッグしにくいので、エラー箇所に飛んでくれる「クラスモジュールで中断」に変更することを強く推奨します。

2.ウインドウを表示しよう!

デフォルトでは以下のようになっていると思いますが、これではデバッグはできません。

左上の表示タブからとりあえず「ローカル」「ウォッチ」「イミディエイト」ウインドウを開いておきましょう。

私は普段この右側に縦に並べる配置ですが、これはご自分が見やすければなんでもOKです。

3.デバッグ画面に入ってみよう

Public Function Divide(ByVal a As Double, ByVal b As Double) As Double
    Divide = a / b
End Function

Sub main()
    Divide 0, 0
End Sub


最初の実行エラー画面から「デバッグ」をクリックすると以下のように黄色いライン(設定による)が出てきます。

これは、今ここでエラーが出て止まっていますよ。と教えてくれています。

4.ローカルウインドウを見てみよう

さてこの状態でローカルウインドウを見てみましょう。
ここでは今動いている全体の変数の中身を見ることができます。

「aの値が0」「bの値も0」だからその状態で「a/b」しようとしたからオーバーフローしたんだな、とわかりますね。

5.ウォッチウインドウを見てみよう

「a」の上で右クリックし、「ウォッチ式の追加」をしてみましょう。


以下のように、「a」の中身を見ることができます。


少ない変数を扱うだけであればローカルウインドウで事足りますが、変数が多くなってくるとローカルウインドウの中から探すのも大変なのでウォッチ式にいれてこのウインドウで確認するのがおすすめです。
(またローカルウインドウには出てこない変数を確認するときに非常によく使いますが、それはまたの機会に説明します…)

6.イミディエイトウインドウを見てみよう

イミディエイトウインドウとは、VBAとの直通チャットのようなものです。

Debug.Print "aは" & a & "です"
Debug.Print Now()


このようにコード中に「Debug.Print」を入れれば

このように教えてくれたり。

? a


1行目を直接ウインドウで叩くと2行目(変数の中身)を返してくれたり、まだまだいろんな使い方があります。

さいごに

いかがでしたか?
初歩の初歩の初歩の内容ではありますが、デバッグに触れてみるというのはハードルが高いものだと思います。
そんなハードルをちょこっとだけ下げるお手伝いができていればうれしいです。
ではまた~

Discussion