- ベストアンサー
Excel マクロ シートをコピーするには
初心者です。 今、Excelファイルが2つあります。 1つは、Book1で、Sheet1にA列だけ文字列の入った表があります。 セル 文字列 A3 AAA A4 BBB A5 CCC A6 DDD : : のような感じです。 もう1つ、Book2があり、それにはいろいろな単価表のシートが多数入っています。 そのシート名はBook1,Sheet1の表にある文字列と全く同じものもあります。(表にはないシート名のシートもあります) 今、Book1,Sheet1の表にある文字列と同じ名前のシートを Book2からBook1へコピーしたいのです。 Book1の表にある文字列は、必ずしもBook2にあるシート名と同じとはかぎらないので、 IFを使って、この文字列のシートがあればコピーする というふうにしたらよいかと思ったのですが、あまりに初心者のため、 条件文にどう書いたらよいのかで困ってしまいました。 お力添えを宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
考え方の例 (1)Book1/Sheet1 A列の文字列を配列に格納する (2)Book2のシート名を順次取得する (全シート数を確認してFor~Nextで順次取得) (3) (2)のループ内で(1)の配列と総当りでチェックする (For~Nextループの入子) (4) (3)で一致が確認できればシートコピーして入子ループから抜ける (4)’ (3)で一致が確認できなければ何もしない ってなところでいかがでしょうか?
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
これも丸投げで、現状では回答コードの丸写し以外に手が無いのだろうが。丸投げは禁止です。 初心者には難しいと思うが、考える道筋と課題とヒントを挙げて見る。下記のように、こんなに沢山過去の経験を動員しないと出来ないのだ。 Bool2から行動を起す。 (1)Book2の全ファイルは Book2のモジュールに Sub test01() For Each sh In Worksheets MsgBox sh.Name Next End Sub をやってみて、捉えられることを実感すること。 ーー (2)上記のシート名の各々の名前について 易しい形の例でやってみるコード。 下記は同じブックBook2のSheet1(アクチブシート)のA3:A10 にシート名の一部を入れておいてテストして、感じを掴んでください。 Sub test01() For Each sh In Worksheets MsgBox sh.Name Set f = Range("A3:A10").Find(sh.Name) If f Is Nothing Then MsgBox sh.Name & " は見当たらない" Else End If ' 見つかった時のコピー貼り付け処理 Next End Sub ーー 次の段階は「シート名一覧のあるブック」と、「データがあり、シート名をチェックするシートのブック」とが別の場合(が質問の場合だが)どう変えたらよいか勉強すること。 ここはIFで総なめで同じシート名があるか聞く方法もある。 (3)コピー貼り付けは、どれでも別の2つのブックを開いておいて、1つから他へコピー貼り付けしてみて、マクロの記録をとったコードを参考にする。 全て、チェックやコピー貼り付けの処理は、Test01()のMsgboxのところへ書き込むことになる。 (4)貼り付け先のシートの選択とか、貼り付け後のシート名の修正はどうするか勉強のこと。 (5)シート全体のコピーで行くか、データのあるセル範囲のコピーで行くか考えること。
お礼
ありがとうございます。 返事が遅くなりすみません。 まだシートのコピーをするところまでできてはいないのですが Book2の単価表が別の方が作成しているので、それができ次第、 やってみようと思います。 ヒントを大分いただいたので、時間ができたらテスト品を作成して試してみます。
お礼
ありがとうございます。 For~Next だと、繰り返す回数が分かっているという条件の下でのループ なのですね。 現在、BOOK2の単価表が他の方が作成しており、 全部でどれだけの単価表になるのかが私に分かっていないため 単価表のファイルができ次第、ちゃんと作ってみます。 今日、時間があれば、試しにテスト品を作ってみたいと思います。