今回はVBA初心者講座の第9弾
【エラー対策とエラーに関する用語解説】についてのお話です。
今回はバグやエラーの対処法についてのお話です。
VBAなどのプログラミングをしていると必ずエラーが発生します。
このエラーには原因があり、エラーの原因を見つけ出して修正する必要があります。
そんなエラーの対処方法について見ていきましょう。
それでは、早速本編へ行ってみましょう
バグとデバッグ
IT用語には「バグ」という言葉があります。
バグは英語で「bug」つまり「虫」という意味があり、プログラムの中に潜む問題点のことを言います。
では、なぜプログラムの問題をバグというのでしょうか?
これはまだコンピューターが生まれて間もない頃、調子が悪くなったコンピューターを分解してみたところ
中に虫が紛れてたことが原因だったことから、バグという言葉が使われるようになったそうです。
もう一つバグに似ている言葉で「デバッグ」という言葉があります。
デバッグは英語で「debug」と書きます。
bugの前に「de」と付いていますよね。
「de」とは「除去」という意味があります。
つまり、デバッグとは「問題点を取り除く」と言う意味になります。
つまり、バグとはプログラムに潜む問題点のことで、デバックとはプログラムに潜む問題点を取り除く(修正する)ことを言います。
IT関係ではよく使われる用語なので覚えておきましょう。
エラーとは
バグと混同されやすい言葉が「エラー」です。
エラー(Error)は「間違い」という意味です。
一般的にもよく使う言葉ですが、VBAでは途中でコードの処理が止まってしまうことを言います。
エラーには、大きく分けると2種類あります。
「スペルミス」や「書き方の間違い」が原因で起こるエラーを「コンパイルエラー」
コードを実行してみた結果、何かの原因で実行出来ないエラーを「実行時エラー」
に分けることができ、原因によって言い方が変わります
コンパイルとは、簡単に言うと「パソコンが理解できるようにするための書き方」のことを言います
それぞれのエラーはこんな感じです
Sub コンパイルエラーと実行時エラー()
'コンパイルエラーになるコード
Worksheets("Sheet1")).Select '閉じカッコ「)」が二重になっている
Worksheets("Sheet1"),Select 'Select前の「.」が「,」になっている
Worksheets"Sheet1".Select '"Sheet1"が「()」で囲まれていない
'実行時エラーになるコード
Worksheets(Sheet1).Select 'Sheet1が「""」で挟まれていない
Worksheets("Sheet1").Salect 'Selectのスペルが「Salect」になっている
Worksheets("Sheet2").Select 'Sheet2という名前のシートが無い
End Sub
4~6行目のコンパイルエラーは、パソコンが理解できるようにするための書き方が出来ていないことで起こります。
「スペルや書き方にミス」があるので、エラーになってコードを実行することが出来ません
10~12行目はコードを実行した結果エラーになります。
実行時エラーは、コンパイルエラーに似ていますが、実行した結果何かが足りなかったり、どこかが間違っていることでコードの実行が出来ません
コンパイルエラーと実行時エラーはすぐに見分けられます。
コンパイルエラーは、エラーがあると赤文字になるのでVBE上で修正すれば問題は解決出来ます。
実行時エラーはコードを実行することは出来ます。
実行してみた結果エラーが発生するので後から修正する必要があります。
実際のエラー画面はこんな感じです
エラーには2つのパターンがあるので、なんとなくでも良いので覚えておきましょう
エラーが発生した時の対応方法
ではエラーが発生した場合は、どうすれば良いのでしょうか?
答えはエラーを修正するしかありません。
エラーの原因を解決しない限りコードは実行出来ませんからね。
さっそく実際の修正方法を見ていきましょう。
まずは、コンパイルエラーが発生するタイミングと対処法について見ていきましょう。
コンパイルエラーは、行を変えた時に起こるエラーなのでその場で修正しましょう
行を変えるとは、3行目に間違ったコードを書いて4行目に移動した(エンターキーを押した)時に起こります。
こんな風にコンパイルエラーがあることを知らせてくれます。
閉じカッコ「)」が選択されているので「OK」ボタンをクリックして閉じカッコを削除しましょう
コンパイルエラーは分かりやすいので修正しやすいですね。
実行時エラーはコードを実行した時にエラー表示がされるので「デバッグ」ボタンをクリックして問題点を修正します。
「デバックボタン」をクリックすればコードの修正が出来ます。
「終了ボタン」をクリックすると修正せずにコードの処理を強制的に終了することが出来ます
デバッグボタンをクリックすると、エラーの原因になっている行を黄色く表示してくれます。
今回の場合は「””」が足りないので正しく修正すれば問題は解決出来ます。
ただ、実行時エラーの原因はデバッグエラーよりも原因が特定しづらいので難易度は少し上がります。
デバッグの基本 中断・リセット・ステップイン
エラーが発生してデバッグモードになると、コードの処理は中断されます。
こんな風にタイトル部分に[中断]と表示されて、中断アイコンが押された状態になります。
中断中はコードの実行が途中で止まっているだけなので、変数などに入っている値は残っています。
この値が残っている状態は重要です。
例えば「変数A」には「文字」が入っていて間違ってセルの指定の時に変数Aを使ってしまったとしましょう
そうすると当然エラーになります。
こんな風に変数Aには文字が入っていてセルの内容を表示させようとしています
この場合は「Cell(テスト,1)」となってしまうので意味が通じずエラーになります
変数Aには何が入ってるのかは、ローカルウィンドウに表示されるのでエラーの原因がすぐに分かります
もし、変数の中身が消えてしまったら何が原因だったのか分からなくなってしまうので、中断状態は重要だということだけは覚えておきましょう。
もし、中断ではなく処理自体を終わらせたい時は、リセットボタンを押します。
リセットは「■」ボタンを押せばOKです。
中断モードが解除されて元のVBEの画面に戻ります
デバッグ作業のために最初から覚えておきたい方法がもう一つあります。
それが「ステップイン」という方法です。
ステップインはコードを上から順番に実行していく方法です。
私もよく使いますがコードを1行ずつ実行させることで、エラーの発生元を発見するのにすごく役立ちます。
ステップインの実行方法はすごく簡単です。
①デバック→ステップインをクリック
②1行目から1行ずつ順番に実行してくれるので、エラーになるまで実行していきます
実行していくと、またエラーで処理が止まります
つまり、そこがエラーの原因ということですね
ただし、ステップインを使う時は、ショートカットキーも必ず覚えちゃいましょう。
ショートカットキーは「F8キー」なのでF8キーを連打して、素早くエラー原因を見つけ出しましょう。
エラーは必ず起こるのでデバッグの基本はしっかりと覚えておきましょうね。
ステップインを使う時は、ステートメント内(Subの行)をクリックしておかないと実行してくれません
また、任意の場所をクリックしてからステップインを実行すると、その場所から実行してくれるので覚えておきましょう
まとめ
今回は、バグやデバッグの意味・エラーとの違いやデバッグの基本操作についてお話してきました。
VBAを始めプログラムにはバグは付きものです。
エラーを起こさずに何かを作ることは出来ません。
最初はエラーがたくさん起きて嫌になることもあるでしょう。
ただ、エラーの原因は結構単純なものだったりするので、一度落ち着いてコードを見直したり書き方やスペルに間違いが無いかチェックしてみて下さい。
少しずつ慣れていけば、エラーの原因は発見しやすくなってくるので落ち着いて探しましょう
たまに上手くいかなすぎて「ぬぉぉぉぉ~~~!!!」なんてこともあるので
そういう時は他のことをやって下さい。
意外と湯上がりとかに「あ、もしかして あのエラーの原因ってこれかも」なんてひらめいたりするものです。
まずは、エラーの対策術をしっかりと覚えておきましょう。
最後まで読んでいただきありがとうございます。
それでは、次回またお会いしましょう。
ばっばばーい
コメントを残す