マクロを「書いてみた」「動かした」「ダメでした」。

最終結果だけでなく処理途中の状態を検証していきます。投げ出す前に自分で検証してみましょう。
Webの掲示板などでよくある初心者の質問です。 よく、WebExcelVBA関連の掲示板などで、初心者の方が他の質問の回答などを参考にしてマクロを作って動かしてみたものの、エラーになったり期待する結果でなかったりして、「なぜでしょうか」と質問を上げてくることがあります。
そのマクロが自分で書いたものでも、Webサイトで見つけたものを変更したものでも、「マクロの記録」で作られたものであっても同じです。(記録したマクロは、最低限同じ環境で起動させないと同じ動作はしないばかりか、コードの記録パターンにある程度限りがあるので、そのままでも動かないケースもあるようです。)
Webの掲示板には、自分でマクロなど覚える気も作る気もなく要件だけ書き出して質問してくる人もいますから、それよりは数段マシですが、ここで覚えてほしいのは作ったマクロの動作検証方法です。つまり、書いたコードの「間違い探し」の方法です。



このページでは「コード」と表記しますが、この「コード」とは「VBAのソースコード」のことです。



作ったコードを見直すだけではうまく行きません。
普通、コードを作成しただけでそのまま正しく動作するというのはごく簡単(単純)なマクロの場合だけです。
数行のマクロなら、動かしてうまく行かなくてもコードを見直すだけで間違いが見つかって、すぐに直せるかも知れません。でも、ベテランになると数百、数千、あるいはそれ以上の複雑なマクロを仕上げます。
これらは、いくらベテランでもコードを作ったままで最初からまともに動くなんてことはありません。作ったものは必ずテストを行なって間違いを正します。これを一般に「デバッグ」と言います。「デバッグ」とは、テストによる動作検証+不具合箇所修正の作業だと考えて下さい。 この後で触れますが、この「デバッグ」とは「テスト」でダメだったらコード全体をながめて間違いを見つけるというものではありません。

初心者とベテランはどこが違うのでしょう。
要求された機能を「コード」として実装させるわけですから、作成された「コード」のサイズは初心者とベテランでそれほど大きく違うことはないはずです。
ここでの初心者とベテランの違いは、個々の構文をいちいち調べなければならないのか、ある程度頭に入っているのかの違いです。 「コード」作成の所要時間はこの点で差異が発生しますが、初心者であっても自分の技量での所要時間はある程度見込めると思います。
大きく違ってくるのは「デバッグ」に掛かる所要時間です。



もちろん、初心者とベテランでは、「テスト」での不具合発見の頻度は違います。ベテランはどのように記述したら、どのように動作するかを熟知しているため、この点で記述そのものに自信がない初心者とはおおきく違うわけです。結果、正しいマクロに仕上がるまでの時間(手間)は大きく違うかも知れません。
ベテランは意味も解らないままコードを書くことがないわけですから、「デバッグ」の作業は単なる「ミス」の発見・修正のための作業です。複雑なコードでなければ短時間で完了するでしょう。
初心者にとっては「デバッグ」の作業は手間が掛かるものかも知れません。すぐに投げ出すのではなく、「デバッグ」を自分でやって経験を積まなければいくらやっても身につきません。



これを身につけないと「デバッグ」に掛かる所要時間について自分で「メド」が付けられないことになってしまいます。

「デバッグ」とはどのようなことをするのでしょう。
テストはマクロの記述間違い(動作不具合)を見つけるためのものです。不具合が見つからないことを良いことだとは思わないようにして下さい。見つかって直せた方が完成度が上がるのです。
大規模な開発プロジェクトでは、この「テスト」に関する工程作業をレポートさせて、不具合発見率を統計して、全体の精度の平準化を保ちます。不具合発見率の低い担当者がいると、第三者に再検査させたりして裏打ちを掛けたりします。
作ったままのコードでの不具合発生率はベテランの方が低いですが、どちらにしろ「デバッグ」は行なわなければなりません。「デバッグ」というのは、そのまま動かして最終結果を確認するのではなく、
  • コードの上をどのような順で処理のポイントが流れているのか
  • 途中で変数に格納された値は意図の通りなのか
初心者の場合は、これらを書いたコードを1行ずつトレース(ステップ実行)しながら、途中途中でのコードの進み方、変数の内容などを確認して行く方法を採るのが一番です。

「デバッグ」の方法を身につけましょう。
いろいろなケースでの具体的な手順・手段等は「作ったマクロの動作検証方法」で説明しているのでそちらに譲りますが、
「ステップイン」でトレースを開始
マクロの起動を「実行」ではなく、「ステップイン」で起動させ、コードの現在行が黄色で反転表示されたらF8を押しながらトレースを進めるのが基本です。必要なポイントでは変数にマウスポインタを当てると格納されている値が表示されます。
このような方法を体得せずに掲示板などに書いたコードをそのまま投げ出して、回答者に添削を求めてくるのでは進歩しません。
初心者の場合は、「デバッグ」でトレースして見つけた不具合箇所をそのまま正しく直せないこともあります。
選択していた範囲がコメントにする
このような場合は、元のコードをコメントにしておいて想定されるコード修正を行なって、再度トレースを行なうようにして下さい。ここで多少の試行錯誤があっても構いません。
直してもうまく行かないなら一旦(コメントにしてあった)元のコードに戻して、別の対応方法を調べて下さい。この作業を繰り返して正しいコードを仕上げていきます。
「デバッグ」を行なって記述上で想定と違う動きをする箇所を見つけて、その違いに理解ができないならその点を再度調べるなり、ベテランに質問するなりして正しい記述方法を身につけて下さい。

参考コードを見つけた時でも内容を理解しましょう。
自分で作ったコードでない場合は、まず、必要なのは、そのコードをきちんと理解することが必要です。「デバッグ」はコードのトレースですから、コードを理解していないと何にもなりません。
コードの意味が分からなければ、個々のメソッドやプロパティ、ステートメントをVBAヘルプで調べて下さい。
コードを自分で書く時には、目的から記述するメソッドやプロパティ、ステートメントをヘルプで見いだすことは難しいですが、既に出来ているコードのキーワードは、作成者が独自に作った関数などでなければ、ほとんどヘルプに載っています。

最初に作ったコードと実行可能になったコードは何が違うのでしょう。
初心者の方は実際に正しく動くようになったら、最初に書いたコードと正しいコードでどこが違ったのかを確認して下さい。このためには変更前のコードをコメント化して残しておくと良いでしょう。
この作業で正しいコードを理解するようにし、次回から不理解による誤記をしないようにすれば「デバッグ」による作業が軽減できるようになります。