本格的なプログラムを目指す為に、いろいろ手直ししようと思います。気を付けるべき事は、1.可読性2.保守性3.処理スピードになるかと思います。私は、上記を満たした上で、美しいプログラムを書きたいと思っています。難しく、毎回反省していますが。(笑)では、モジュール「Mod共通」を全面取り換えします。"【シート取得】シート名が不正です。"【シート取得】名前定義が不正です。"【開始セル取得】シート名が不正です。"【開始セル取得】名前定義が不正です。Function前回とは全く違う物になっています。前回は、Public変数を使っていたのですが、どうもスマートではないと感じます。従って、Public変数を取り止め、Functionに変更しました。処理スピードは、前回の方が早いだろうと思われますが、スピードといっても体感できる違いはありません。それよりも、可読性・保守性を優先しました。マクロ開始処理マクロを開始する時に、まずやるべきことを纏めています。Falseは必須だとお考え下さい、これを指定することで、スピードが格段に早くなります。指定しない場合は、マクロのシート操作が目で見れます。目が良ければ(笑)1つ1つの説明は、コード横のコメントを見て下さい。詳細については、ネットで調べればすぐに探せるはずです。最低限、これらを指定すれば良いと考えておいて下さい。マクロ終了処理マクロ開始処理で停止したものを、再開させます。Function引数の渡し方は省略可能で、省略すると、ByRefになります。ByValは、値渡しByRefは、参照渡し細かい話ですが、ByRefの場合は、Functionの終了時に、元の変数に戻す処理が行われます。従って、必要が無い場合は、ByValを指定します。ByRefを指定してFunctionを作成すれば、呼び出し側に、引数を通じて値を戻すことが出来ます。初心者の方のプログラムでは省略していることの方が多いようです、できれば指定する位で良いとは思います。戻り値のデータ型に、Worksheetを指定しています。このFunctionの呼び出し元に、Worksheetを返します。Worksheetはオブジェクトです、オブジェクトの型は難しいので、不明な場合は、objectを指定します。Nextこれ以降はエラーが発生してもマクロを停止させず、次ステップへ進みます。このように、エラーを補足する命令をエラートラップといいます。0エラートラップを無効にし、エラー発生でマクロが停止するようにします。Select複数の条件で処理を分岐させる場合に使用します。If文は、真か偽の判定のみの場合に使用します。Caseを使用します。Worksheets(Range("顧客登録シート名").Value)Functionの戻り値を設定しています。ここは、Worksheetオブジェクトなので、Setを使用します。Range("顧客登録シート名").Valueで、以前は、.Valueを省略していましたが、ここではあえて指定しています。省略できますが、Rangeというオブジェクトなのか、そのValueプロパティなのかを明示しています。可読性を上げています、読み手に誤解を与えない為です。"【シート取得】シート名が不正です。vbOKOnly「OK」ボタンのみのメッセージボックスを表示します。処理途中で、使用者に対し、メッセージ表示します。プログラム完成後は、このメッセージが表示されることはほぼ無いはずです。作成中のデバッグの補助が主な目的です。Nextにより、ここに処理が移ってきます。その場合は、Functionの戻り値である、シート取得に何も設定されていません。この場合は、Nothingが入っています。Endマクロを停止します。ここでは、シート名が取得できないので、これ以上処理が不可能なので、停止させます。戻り値の型が、Range、つまりセル範囲を指定しています。Range("顧客登録開始")Functionの戻り値を設定しています。ここは、Rangeオブジェクトなので、Setを使用します。難しくなってきてしまったようです。理解できない部分は、まんま受け入れて、先に進んでも問題ありません。いっぷく続いて「Mod共通」を使うように、モジュール「Mod顧客登録」の変更です。1).ClearContents'顧客一覧の列幅が、顧客登録の列幅の何個分かを計算し、セルを結合する。Sub太字の部分が変更点です。マクロ開始処理Subプロシージャー「マクロ開始処理」を実行します。開始セル取得("顧客登録")前回までは、Public変数のRangeオブシェクトを使っていましたが、その部分を、Function「開始セル取得」に変更しました。シート取得("顧客登録")前回までは、Public変数のシート名を使用し、Worksheets(sht顧客登録)としていましたが、その部分を、Function「シート取得」に変更しました。Functionの型がWorksheetなので、全く同じことになります。シート取得("顧客登録").Selectシートを選択しています。1).Selectexpression.Offset(行番号,列番号)です。指定の行、列分移動したセルを返します。ここでは、シート「顧客登録」の使用先頭セルの右横になります。そのセルを選択しています。?見づらくなったまあ、慣れの問題です。可読性と保守性を高めるための手段です。これで、シート名の変更等を気にすることなく、心置きなくプログラミングできます。データを取得し、「顧客登録」に表示してみましょう。本格的なプログラムへこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。本格的なプログラムへこのサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。