Excelでマクロを作る際に最初は思い通りに動かないと思います。そんなときにVBAの修正が必要です。
私は仕事で開発業務で実際に使えるマクロを10数個作成して来ました。しかし、どれも作成して一発で動くことはなかったです。
何度も修正して動作確認することで完成させます。その修正のことをデバッグといいます。
この記事では私が何度も行ってきてたデバッグの経験から、デバッグのコツについてまとめました。
マクロにデバッグが必要な場合
マクロの意図しない動作は大きく分けて2通りあります。
- 出力結果が意図したものではない
- 出力される前にエラーが出て止まる
これら2つの場合がありますが、基本的なデバッグの流れはどちらも同じです。
デバッグの基本的な流れ
デバッグの基本的な流れは下記になります。
- 動作が怪しいところでマクロを止める
- 途中経過の変数を確認する
- おかしな変数を見つけたら、その原因となっているプログラムを修正
- 以下、最終的な出力が正常になるまで1へ戻る
動作が怪しいところで止めることが重要です。エラーが発生する場合は自動的に止まります。エラーではない場合でもVBAエディタのデバッグの機能で止めることができます。
また、エディタの機能として変数をかんたんに確認する機能のあります。以下では、これらのデバッグのための機能を詳しく説明します。
マクロを途中で止める方法
エラーメッセージで止まった場合はその状態から修正するのが良いです。VBAには主に2つ止める方法があります。
ブレークポイントで止める
VBAエディタの機能でブレークポイントを設定してその場所でプログラムを止めることができます。
エディターの画面の左端をクリックするとで赤い丸が現れます。この赤い丸はその場所でプログラムが止まるという目印です。これをブレークポイントといいます。
ブレークポイントを設定したら、VBAエディタでマクロの実行をします。エディタの画面で「F5」を押すことでブレークポイントまでプログラムをすすめることができます。
ステップインで少しずつ止める
もう一つの方法がステップインです。ステップインとはプログラムを1行ずつすすめることを指します。
「F8」を押すことでステップインでマクロを実行することができます。この事により、少しずつマクロを勧めながら確認することができます。
VBAが短いときや着実に進行を確認したい時ににおすすめです。
デバッグのため情報収集の方法
デバッグのマクロを途中で止めておかしなところがないかを確認することが重要です。
まずは止めたところで変数が意図しないものになっていないかがを確認したいです。
ブレークポイントなどでマクロを止めた場合の、変数の確認方法について紹介します。
変数名の部分をカーソルで触る
プログラムに記載されている変数をマウスカーソルで触れることで変数の中身が表示されます。
上の画像の例ではブレークポイントで止まったタイミングの「val_1」という変数に中身が表示されます。
簡単に中身を確認したいときに有効です。
ウォッチウィンドウで怪しい変数を確認する
デバッグ中に常に中身を見ておきたい変数がある場合はウォッチウィンドウを使います。
エディタの画面で右クリックからウォッチ式の追加を選択して、追加したい式を記載します。
これでエディタ画面のウォッチウィンドに常にその変数の中身と型が表示されます。
式の中では変数の演算も設定できます。例えば「val_1+100」なども計算してその時の値を表示してくれます。
オブジェクトやオブジェクトのプロパティも式で設定すれば表示できます。
ローカルウィンドウで変数を確認する
マクロで使用している変数を一括で表示する方法がローカルウィンドウです。
エディタの表示リボンのローカルウィンドウを選択すると表示できます。
網羅的に変数を確認したいときに最適です。
エラーメッセージが不明な場合は検索してみる
エラーメッセージで止まった場合に有効な手法です。エラーの原因がすぐにはわからなかった場合はエラーメッセージの文をgoogleで検索してみます。
典型的なエラーとして型が一致しませんというエラーがあります。
ヘルプのボタンを押すことでマイクロソフトの公式のページが表示されますが、分かりにくいことが多いです。
そこで、エラーメッセージの「型が一致しません」をgoogle検索します。
google検索することで、わかりやすくエラー内容を説明した記事が見つかるはずです。
これをもとに修正のヒントにしましょう。
典型的な修正の例
ここでは典型的なデバッグでの修正例を示します。デバッグのときのヒントになるはずです。
整数と文字列の取り扱いの混同
変数に文字列が入っていてその変数と足し算などの計算をしてしまう場合エラーが発生します。
変数は中身がすぐに見えないので、複雑なマクロになると発生しがちです。
参照しているワークシートが想定と異なる
マクロで頻繁に使う「cell( 行番号,列番号)」の式はそのタイミングで選択されている、シートのセルを参照します。
選択されているシートが想定しているシートと異なる場合は思った動作になりません。
まとめ
Excelのデバッグのコツについてまとめました。マクロを作ると必ずデバッグが必要になります。デバッグを効率的に行うことでマクロ作成が早くなるはずです。
この記事が役立ちましたらtwitterでシェアしてくれると喜びます。