Excel

マクロでエラーになる原因は?デバッグ方法と原因調査のテクニック

マクロってなに?VBAで記述されたプログラムのこと

マクロってなに?VBAで記述されたプログラムのこと

エクセルでは決められた操作や手順をプログラムとして組んでおき、好きなタイミングで実行できる「マクロが用意されています。
このプログラムはVBA(Visual Basic for Applications)と呼ばれる言語で記述されています。

では実際にマクロを作って実行した時に、マクロが動かないことに直面すると思いますが、それが「バグ」と呼ばれるものなんですね。

「プログラマーならバグはないんじゃないの?」なんて思うかも知れませんが、誰が作ってもバグは発生するもので、慣れていくことでバグの数を減らすことはできます。

マクロが動かない場合、プログラムのどこにバグがあるか発見する方法を見ていきましょう。

マクロ(VBA)で効率よくデバッグする方法は?ステップインとブレークポイントを使う

マクロ(VBA)で効率よくデバッグする方法は?ステップインとブレークポイントを使う

デバッグプログラムのバグを発見して修正することで、マクロが動かない時に必ず行うことです。

デバッグをしてバグの原因を探す方法として、有効な手段が2つあります。

1つ目はマクロを1行ずつ実行していく「ステップイン」で、マクロが実行された時点での結果が直接確認できるため、バグが確実に分かる方法です。

2つ目はあらかじめ指定した位置までマクロを実行する「ブレークポイント」になります。

この2つの方法を組み合わせて使うことで、デバッグがスムーズにいきます。

また原因を調査する上で、イミディエイトウィンドウとウォッチウィンドウを使うとデバッグの効率がアップします。
使い方が慣れない人は「ローカルウィンドウ」だけでもいいかも知れません。

ローカルウィンドウを使えば、VBAの変数(データ)の値をチェックすることができるため、正しい値が入ってるかすぐに確認できますよ。

デバッグのテクニック

  • ステップイン  :マクロを1行ずつ実行
  • ブレークポイント:指定した位置までマクロを実行

ステップインってなに?マクロを1行ずつ実行すること

ステップインってなに?マクロを1行ずつ実行すること

ステップインとは1行ずつ処理を実行していくことで、処理の流れを順番通り追っていくときに使います。
デバッグする上でステップインはとても有効で、バグが発生するタイミングが完全に分かります。

1行ずつ実行することで、マクロで使っている変数の値を常にチェックができたり、マクロが終了できない無限ループにならないかがチェックしましょう。

ステップインでバグを発見したら、あとは正しい処理に修正をするだけです。

ステップインだと1行ずつチェックするため、時間もかかる地道な作業になりますが、プログラムを見て頭の中で処理を考えるより、変数の値をチェックする方が効率よくデバッグができますね。

デバッグで必ず最初に覚える方法になりますので、マスターしましょう。

ステップインを実行しているところに黄色矢印があるため、見た目がとても分かりやすいですよ。

似たような言葉でステップオーバーステップアウトがありますが、ステップインが使いこなせるようになってから覚えるとデバッグ速度がアップしますよ。

ブレークポイントってなに?指定した位置で処理を待機すること

ブレークポイントってなに?指定した位置で処理を待機すること

ブレークポイント指定した位置まで処理を実行して、一時停止させる機能になります。
そのためマクロの処理は終了していません。

ブレークポイントはバグがありそうな場所の直前に指定しておくことで、ブレークポイントの前の処理を一気に実行するのに使います。
これは何個でも指定が可能で、変数の値が気になる処理の直前に設定しておくと良いでしょう。

ブレークポイントの指定や削除は簡単にできるため、動かない原因を探るのに複数指定して原因を絞り込んでいきましょう。
処理の中断と再開を繰り返しても全く問題ないので、安心して下さいね。

ステップインと組み合わせると効率アップが可能で、ブレークポイントからステップインで変数を確認後に、次のブレークポイントに一気に飛ぶこともできますよ。
正常に動作する部分をチェックしても時間がもったいないので、普通に実行してしまいましょう。

ブレークポイントはコードの頭に赤丸が付きますので、ブレークポイントの設置場所はすぐに分かるようになっています。

デバッグの注意点は?デバッグするマクロを指定すること

デバッグの注意点は?デバッグするマクロを指定すること

デバッグしたいマクロが動かない!ということがよくあります。
実行したいマクロが選択されていない状態で、マクロを実行しようとすると発生してしまう現象です。

マウスでカーソルを実行したいマクロに合わせてから実行しましょう。
別のマクロにカーソルが当たっていると、想定外のマクロが実行されてしまって、パニックにならいかねません。

処理が終了しない?ループ処理がある場合は無限ループの可能性がある

処理が終了しない問題でよくあるバグが、ループ処理が終了できないことがあります。

マクロの実行やデバッグ中でも処理が終了できないため、実行前にループ処理の終了条件が正しいことをチェックしておきましょう。

バグのあるコードを消していいの?コメントで残しておくことが大事

ブレークポイントとステップインを使ってバグを発見した場合に修正すると思いますが、修正前に注意点があります。

それは間違ってる部分を消してしまわないことです。

いつでも元の状態に戻せるように、コメントアウトという機能を使ってコードを残しておくと良いでしょう。
コメントアウトとはコードにメモを残す機能で、処理されることのないコードになります。

コードの先頭に「'」を付けると文字が緑色に変わり、コメント扱いに変わります。
修正前のコードをコメント状態にしておくと、修正する前後の状態がすぐに確認できますね。

また修正前のプログラムのバックアップを保存しておくと、何かあったときに安心です。

バグがないプログラムを作るには?ルールを決めてきっちりと作ること

バグがないプログラムを作るには?ルールを決めてきっちりと作ること

複雑な処理や想定しないデータ、使い方の間違いによって正しく動作しないことがあります。
そのため想定しない結果だった場合、バグがあると判断することになりますね。

バグが発生してしまったら、原因を特定して修正する必要がありますが「デバッグ→修正→テスト」を繰り返していては時間ばかりかかってしまいます。
効率を考えるとバグを減らす努力の必要がありますよね。

キーボード入力を丁寧に打つことで、正しいコードを記述するようにします。
省略できるカッコもしっかり記述して、誰が見ても分かるようにする。

想定外とする値に対してエラーとなる処理をしっかり記述することで、以降の処理を継続させないようにできますよね。

変数の名前は分かりやすいものを付けて、似たような名前や意味のない名前を付けないようにする

バグあると分かった場合、一番大変なことは原因の調査です。
プログラムが大きくなればなるほど、時間や手間が倍増してしまいうため、作るときにバグを減らすようにすることは必須ですよね。

VBAが動かない原因のまとめ

VBAが動かない原因のまとめ

今回はエクセルのマクロを作った時に発生するバグに対して、どう対応すれば解決できるかについてお話ししました。

マクロなどのプログラムには、必ずと言っていい程バグは発生します。
大きなプログラムほどバグは多く潜んでいて、探すことも困難になります。

バグが見つかると調査や修正、テストなどたくさんの時間がかかってしまいますよね。
きっちりとルールを決めてバグを少なくするようなプログラムを作れるようになりましょうね。

-Excel

© 2021 富山 パソコン教室「キュリオステーション掛尾店」