プロが教えるわが家の防犯対策術!

VBA初心者で勉強中です。
ご教授お願いします。
複数ブックの複数シートを各シートの特定セル(文字)を条件に、条件毎のブックにシートを振り分けるマクロをつくりたいと思っています。
【元データ】
Aブック
sheet1 セルF21佐藤
sheet2 セルF21山田
sheet3 セルF21木村
sheet4 セルF21後藤
sheet5 セルF21渡辺
Bブック
sheet1 セルF21木村 愛
sheet2 セルF21佐藤 太郎
sheet3 セルF21佐藤 太郎
sheet4 セルF21渡辺 健太郎
sheet5 セルF21鈴木 春香

※ ①ブックの名前・シート名の決まりがない。
②シート数は毎回変わります。
③条件とするセルF21の名前は名字とフルネームが あり、名字で被る人はいないので名字一致で処理したいと思っています。

【新規作成ブック】
佐藤ブック→Aブックsheet1,Bブックsheet2,Bブックsheet3
山田ブック→Aブックsheet2
木村ブック→Aブックsheet3,Bブックsheet1
※セルF21の名前に一致したブックにシートをコピー振り分けたいと思っています。

複数ブックの複数シートにおいて、セルの条件に合ったシートを選択し、別ブックにシート毎コピーする
マクロが思いつきません。
また、条件になる名前は固定の人(10名)になるのでリストを作成しといて処理していく方法が良いでしょうか?

A 回答 (1件)

こんにちは



全部を一気にまとめて処理しようとすると混乱してしまうのなら、少し単純化して考えれば整理できると思います。
プログラムの作成も、ある単位に分けて作成してゆくようにすれば、考えやすくなると思いますし、デバッグもやりやすくなるのではないでしょうか。(若干、効率は落ちるかも知れませんけれど…)

例えば、10人のうち一人分だけ、該当するシートを集めてくる処理ができれば、それを10人に拡張するのはできそうですよね?
では、一人分を、一つの元データのブックから抜き出す処理(該当するシートが無いかも知れません)を作成できれば、それを元データの複数ブックに拡張することもできそうですよね?

ということで、「一人分のブックに、ある元データブックから該当するシートがあればコピーする」というものを作成することを最初の目標になっさってはいかがでしょうか?


そのほかに考え方のヒントをいくつか・・・
>①ブックの名前・シート名の決まりがない。
>②シート数は毎回変わります。
いずれにしろ、元データのブック内の全シートを順にチェックすれば済むのではないでしょうか?

>③条件とするセルF21の名前は名字とフルネームが あり~~
ご提示のようなセル内容であると限定できるのなら、文字列に空白が含まれれば、空白以前の文字だけを採用する。空白がなければ全部が苗字と判別する。
ということで良さそうに思えますが・・・

ついでながら、シートをコピペする際に、(新しく作成する)シート名をどのように決めるのかは不明ですが、元のシート名と同じにしようとすると被る可能性がありますので注意が必要です。
シート名は何でもよくて、内容さえコピペできれば良いというのであれば、あまり問題は無さそうですが。

>条件になる名前は固定の人(10名)になるのでリストを作成しといて~
全て苗字をID代わりにして識別するという考え方なので、どこかにリストを作成しておくか、あるいはプログラム中に直接配列などで定義しておいた方が便利だと思います。
(人数が10人と少ないということもあります)
個人のブックがどこにあるのか(path)も必要になりそうですね。
個人ブック群が同一フォルダ内にあって、それ以外のブックは無いというような条件が成立するなら、当該フォルダ内にあるブックを名前のリストと考えることも可能ですけれど・・・
    • good
    • 0
この回答へのお礼

fujillinさん
こんにちは。
アドバイスありがとうございます。
アドバイスいただいた通り、
一気に考えるのではなく、部分的に
マクロを考えて進めていきたいと思います。

お礼日時:2018/02/01 15:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!