自動化出来ました、しかも、シート名も自由に変更できます。これだけでも、いろいろ応用範囲があり、結構使えるはずです。「何かの一覧」→「何かの登録」、として自由に使用が可能です。これからは、大量のプログラムを組み込んでいかなければなりません。説明も、既出の命令はあまり説明できなくなります。そこで、その前に、効率的なコーディングと、プログラム作成では避けて通れないデバッグについて説明しておきます。陥りやすい間違い、よくやってしまう間違い等も説明しておきます。効率的なコーディングモジュールの移動コール先のSubモジュールやFunctionに移りたい場合があります。Shift+F2のいずれか。元に戻る場合は、「編集」→「元に戻す」、Ctrl+Zのいずれか。ツールバーを表示してあれば、ボタンで可能です。右上のプルダウンのモジュールを選択しても移動可能です。Ctrl+↓で、1つ下のモジュールに移動します。Ctrl+↑なら、1つ上のモジュールにに移動します。Up」でもほぼ同様の動きをします。単語の選択各単語となる、モジュール、オブジェクト、プロパティ、メソッド等をダブルクリックすると、全体が選択状態になります。マウスを使用しない場合は、Shift+→等での選択となります。うまく活用すれば、スペルミスを減らせます。入力候補の表示方法1.Range("A1")まで入力し、「Ctrl+Space」で、次の入力候補が表示されます。矢印キーで選択し、「Tab」で、入力されます。文字を続けて入力していけば、その文字で始まる候補だけになります。方法2.Range("A1").と、「.」を入力した時点で、次の入力候補が表示されます。どちらでも好みで使い分けて下さい。インデント重要「ツール」→「オプション」でタブの量を設定できますが、初期値の4のままが良いと思います。インデントは絶対に正しく行って下さい。見た目の美しさだけでなく、バグの減少にも大いに貢献します。IfNext説明の必要がありませんね、どっちが良いか一目瞭然ですよね。インデントは「Tab」キーで行います。Tabで右へ、Shift+Tabで左へ移動します。複数行を選択していれば、一気にインデントされます。_」、スペースに続けてアンダーバーで、行の継続が出来ます。_"○○"むやみにやるのは、かえって見づらくなります。画面解像度により、1行に入る文字数が違いますので、一概にはいえませんが、見やすくするために、適時使って下さい。その他、メニューにいろいろな機能がありますので、自分で使いやすい、マウス操作、ショートカットを見つける事が重要です。重要な事は、コードの使い回しです。これに勝るものはありません。逆に言えば、使い回しができるコーディングをするように心がけるということになります。最初は、苦労しますが、後にそれが財産となります。Editor)の画面です。メニューのデバッグについてVBAプロジェクトのコンパイル一般には文法チェックと思われている事が多いようですが、正確には違うようです。コンパイルによって、ブックサイズが大きくなり、Pコード(説明省略)が作成されるようです。コンパイル前後での処理速度については、はっきりしていません。コンパイルで早くなると言っている人もいるようですが、MSには、ほとんど変化しないとの記事もあるようです。他人に渡す場合は、コンパイルしてからが良いです。コンパイル後に何も変更していない場合は使用不可になっています。F8プログラムを1ステップづつ進めます。Call先のSubモジュールや、Functionの中にも入り、1ステップづつ進みます。全てのステップを確認する場合に使用します。Shift+F8Call先のSubモジュールや、Functionの中には入りません。元のプロシージャーを1ステップづつ進みます。今実行しているプロシージャーの動作のみ確認する場合に使用します。Ctrl+Shift+F8今実行しているプロシージャーを抜けて、呼び出し元に戻ります。ステップインでモジュールに入った時に、急ぎ呼び出し元の次ステップに進みたい場合に使用します。Ctrl+F8その通り、カーソル行の前まで実行一気に進みます。ブレークポイントがあれば、そこで止まります。Shift+F9ウォッチ式については、省略します。使わなくても困らないと思います。F9コードウインドウの左のグレー部分をクリックでも設定出来ます。押すことにより、設定⇔解除が繰り返されます。変数定義などは設定できません。実行が設定したステップで中断します。Ctrl+Shift+F9文章そのままですね。Ctrl+F9次のステートメントの表示絶対に使わないと思います。プログラムが小さいうちは、全ステップをステップインで実行することも可能ですが、プログラムが、数千になった場合、実際の実行ステップはその数倍になり、全てをステップインで実行することは、現実的に不可能になりますし、時間の無駄です。プログラムだけを見ていても、最初は何が悪いのか分からないと思います。エラーにはならないが、結果が正しくないといった場合です。そのような場合は、以下の方法を試みて下さい。1.VBEのウインドウを小さくして、バックにエクセルの画面が見えるようにして下さい。2.まずは、入口となるモジュールの先頭ステップにブレークポイントを設定3.そしてマクロを実行(F5)して下さい。4.バックのエクセルの動きを良く見て下さい。5.あっ、この辺だという所があるはずです。2.のブレークポイントは解除7.再度マクロを実行(F5)して下さい。8.ブレークポイントで中断後は、まずは、ステップアウトで進む。9.問題のステップを特定して下さい。10.SubモジュールやFunctionの場合は、ここでステップインに変更。11.また、ステップアウトで進みます。12.4.以降を繰り返す。して、問題のステップを特定していきます。複数のSubモジュールの不整合によるバグも多いので、そうそうこんな単純には行きません。伝えたいのは、「急がば回れ」ということです。問題を特定せず、感を便りに適当に直したりすると、かえって状態を悪くします。(経験を重ねれば、感で、多分ここだなというのも分かるようにはなってきますが)ただし、ステップ実行の途中でも、エクセルを触ることが出来てしまいます。選択シートを変更したり、選択セルを変更してしまうと、それが原因で、プログラムが正しく動作しなくなる場合があるので注意して下さい。アクティブシート以外を見る為にシート選択を変更した場合は、元のシートに戻すようにして下さい。アクティブシートに頼らないコーディングが望ましいのですが、完全には無理です。Ctrl+G先のVBEの画面の右下のウインドウです。MSの製品ですので、他のウインドウも含めて、フロー化が出来ます。私は好きではありませんが(笑)ステップ実行中に、このウインドウで、変数等の値を見る事が出来ます。(マクロを実行していなくても、一応使えますけど)「?変数」を入力し、Enterすると、その下に値が表示されます。セル等を指定しても構いません。1)」アクティブなシートの指定セルの値が表示されます。「?Worksheets(2).cells(3,3)」このようにすれば、アクティブではないセルの内容も確認出来ます。「?Range("A1:B10")」この指定はエラーとなります。単純に言えば、(ただ一つの)値を表示出来ない指定はエラーとなります。1)」←先頭が「.」です。これはエラーとなります。Withで省略したシート等は省略できません。「?開始セル取得("顧客一覧")」今回のプログラムで作成したFunctionですが、これは表示されます。戻り値が1つのセルであるRangeオブジェクトだからです。Functionでも、戻り値が、(ただ一つの)値を持つなら表示可能です。対象とコーディングすることで、イミディエイトウインドウに、対象の値を表示できます。対象は、上で説明したエラーとならない指定です。「ツール」→「オプション」前述した、インデントのタブ間隔等は、このオプションで変更できます。特別な理由が無い限り標準で使用して下さい。自分一人で全て完結するならまだしも、他の人と関わるなら、特殊な設定はしない方が良いです。絶対に「全般」タブにある、「エラートラップ」は変更しないで下さい。「エラー処理対象外のエラーで中断」にしておいて下さい。これを変更すると、プログラム内でのエラートラップが正常に動作しません。Integerこれですと、i1は、Variantになってしまいます。基本ですが、もしこれが正しいとしても、書いてはいけません。Thenのように、優先順を明示して下さい。○○これは文法エラーです。○○、とIsを使います。WithこのCellsは、アクティブシートのセル参照になってしまいます。先頭に「.」を付けて、「.Cells」とします。・・・)どちらでも通りますが、複数の引数がある場合は、名前付を使用して下さい。上では、引数の順序を全て正しくしていとなければなりません。「:=」とコロンを忘れずに。Findメソッド引数が多いので、省略できるものは省略して良いでしょう。省略した場合、前回時の指定が引き継がれます。エクセルでの検索にも影響を受けるので、複数個所で使用している場合は、極力全て指定して下さい。Application.WorksheetFunction.VLookupApplication.VLookupどちらも、基本的には同じですが、下は古い書き方になります。現在は、上を使用して下さい。検索値が見つからない場合の動作に違いがあります。上は、エラーで停止しますが、下なら戻り値を判定出来ます。下を使ってのエラー対処は、どうかな?・・・と思いますけど。上でも、エラートラップすれば良いです。この他にも、最終行の取得方法で、たまに間違いというか勘違いかなと思える時もあります。長くなりそうなので、その話は、また別の機会に。その他いろいろあると思いますが、コードの使い回しをすれば、結構なくなるはずです。コーディングとデバッグこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。