さて、本題ですがVBAやマクロ記録でのエラーは開発者にとって本当に嫌なものです。特にマクロ記録を使って、コードを自動生成し、それをほんの少し変えただけで動かないときに身近に聞く人もおらず、ネットで調べてもどの部分を直せばいいかまで分からず「もう、やってられない!」ってことはないでしょうか?
20年以上前にテレビゲームがはやり始めたころは、このエラーが「神技級、横綱級」として子供には喜ばれましたが、業務でのプログラムエラーはバグと言われ、致命傷になりかねず、取り除かなければなりません。
これを料理に例えてみます。
「料理しておいしく出来上がる」こと→成功(エラーなし)とすると、、
【実行時エラー】
材料がないから作れない。
【論理エラー】
材料はある、レシピ通りだが、なぜか超まずい
といった感じです。う~ん、ちょっと強引な表現ですが。
マクロを覚えたての方やある程度自分でコーディングするとよくお目にかかるコレです。このエラーは「文法的にどこかがおかしい」というもので、その文法さえ修正すれば動くタイプのエラーです。
簡単にいえば、文法エラーなのでそこさえ直せば動くようになります。
ただし、気を付けるべきは上記画面の「エラー番号と文言」です。要は全部ですが、このエラー表記は他のエラーでも同じ番号と文言が使われることもあります。従って、「このエラーメッセージが出た場合はこうやる」というのが結構難しいのです。
むしろ解決に直結するのは黄色でハイライト(強調)表示された部分です。
「シート名が見つからないエラー」
この部分を見てどこがおかしいのか判断するほうが早いこともよくあります。(上記のエラーの原因はシート名が「sheet999」をアクティブにしようとしているにも関わらず、そのシート名が存在していないためのエラーです)
ちなみに下記のエラーでも、上記の「シート名が見つからないエラー」と同じ実行時エラー画面内容になります。
「配列の要素数が足りないエラー」
(「シート名が見つからないエラー」と同じエラー番号とエラーメッセージが表示されます)
実行時エラーは恐らくVBAのプログラムコードに慣れていない方が連発して起こるエラーだと思います。(特にマクロの記録を使う場合に「Range」オブジェクト関連のエラーが多い傾向があるように思います)
ちなみに、この実行時エラーはコードをガンガン書きまくり経験を積むことで、ある程度見ただけでどこがおかしいか気づくようになりますので頑張ってください。(ただしWebBrowser連携などは、また一風変わった実行時エラーのため、簡単に解決できず辛いこともあります)
そもそもプログラムは命令通りにしか動かないため、仮に求めている結果でなくても、文法さえ間違っていなければそのまま実行されてしまいます。従い発見が困難となります。そのため、このエラーを可能な限り可視化するためのツールがVBAのエディタに用意されているので、そういったツールを駆使してエラー除去(デバッグ)していく必要があります。
論理エラーは実行時エラーと比べ難易度がはるかに高くなるため、コーディングするレベルで書き方の工夫や、プロシージャを細分化、共有化、コメントを書きまくるなど可読性の高い(読みやすい)コードにしておくと、発見できる時間が短くなります(経験的に)。