質問: vba初心者で勉強中です。 ご教授お願いします。 複数ブックの複数シートを各シートの特定セル(文字) vba初心者で勉強中です。 ご教授お願いします。 複数ブックの複数シートを各シートの特定セル(文字)を条件に、条件毎のブックにシートを振り分けるマクロをつくりたいと思っています。 【元データ】 aブック sheet1 セルf21佐藤 sheet2 セルf21山田 sheet3 セルf21木村 sheet4 セルf21後藤 sheet5 セルf21渡辺 bブック sheet1 セルf21木村 愛 sheet2 セルf21佐藤 太郎 sheet3 セルf21佐藤 太郎 sheet4 セルf21渡辺 健太郎 sheet5 セルf21鈴木 春香 ※ 1ブックの名前・シート名の決まりがない。 2シート数は毎回変わります。 3条件とするセルf21の名前は名字とフルネームが あり、名字で被る人はいないので名字一致で処理したいと思っています。 【新規作成ブック】 佐藤ブック→aブックsheet1,bブックsheet2,bブックsheet3 山田ブック→aブックsheet2 木村ブック→aブックsheet3,bブックsheet1 ※セルf21の名前に一致したブックにシートをコピー振り分けたいと思っています。 複数ブックの複数シートにおいて、セルの条件に合ったシートを選択し、別ブックにシート毎コピーする マクロが思いつきません。 また、条件になる名前は固定の人(10名)になるのでリストを作成しといて処理していく方法が良いでしょうか?
回答: こんにちは 全部を一気にまとめて処理しようとすると混乱してしまうのなら、少し単純化して考えれば整理できると思います。 プログラムの作成も、ある単位に分けて作成してゆくようにすれば、考えやすくなると思いますし、デバッグもやりやすくなるのではないでしょうか。(若干、効率は落ちるかも知れませんけれど...) 例えば、10人のうち一人分だけ、該当するシートを集めてくる処理ができれば、それを10人に拡張するのはできそうですよね? では、一人分を、一つの元データのブックから抜き出す処理(該当するシートが無いかも知れません)を作成できれば、それを元データの複数ブックに拡張することもできそうですよね? ということで、「一人分のブックに、ある元データブックから該当するシートがあればコピーする」というものを作成することを最初の目標になっさってはいかがでしょうか? そのほかに考え方のヒントをいくつか・・・ >1ブックの名前・シート名の決まりがない。 >2シート数は毎回変わります。 いずれにしろ、元データのブック内の全シートを順にチェックすれば済むのではないでしょうか? >3条件とするセルf21の名前は名字とフルネームが あり~~ ご提示のようなセル内容であると限定できるのなら、文字列に空白が含まれれば、空白以前の文字だけを採用する。空白がなければ全部が苗字と判別する。 ということで良さそうに思えますが・・・ ついでながら、シートをコピペする際に、(新しく作成する)シート名をどのように決めるのかは不明ですが、元のシート名と同じにしようとすると被る可能性がありますので注意が必要です。 シート名は何でもよくて、内容さえコピペできれば良いというのであれば、あまり問題は無さそうですが。 >条件になる名前は固定の人(10名)になるのでリストを作成しといて~ 全て苗字をid代わりにして識別するという考え方なので、どこかにリストを作成しておくか、あるいはプログラム中に直接配列などで定義しておいた方が便利だと思います。 (人数が10人と少ないということもあります) 個人のブックがどこにあるのか(path)も必要になりそうですね。 個人ブック群が同一フォルダ内にあって、それ以外のブックは無いというような条件が成立するなら、当該フォルダ内にあるブックを名前のリストと考えることも可能ですけれど・・・