• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルのシートのコピーについて)

エクセルのシートのコピー方法について

このQ&Aのポイント
  • エクセルのシートのコピーをVBAで行いたいがエラーが発生してしまう。どこが間違っているのか教えてください。
  • 貼り付けというブックにはマクロが組まれており、データのブックにあるシート名が貼り付けのブックのリストのシートに記載されています。リストのシートに書かれたシートを貼り付けのブックにコピーしたいです。
  • VBAのサブルーチン「シートコピー」を使って、リストに書かれたシートを貼り付けのブックにコピーすることができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.1

こういうコードをあたしゃあまり書かないので。 コードは短きゃいいってもんじゃないと思ってるから・・・。 ということで、多分 Workbooks("データ.xls").Activate Sheet(コピー元).Activate Cells.Copy Workbooks("貼り付け.xls").Activate Sheets.Add After:=Sheets(Sheets.Count) Cells.Select ActiveSheet.Paste と、素直に分解すれば動くんじゃないかしら。 多分Copyコマンドでそのままブックを渡った処理が 出来ないんじゃないかと思うので。逆にこれで動かな けりゃ、ステップ実行すればどこで止まったかわかるし。

whitebunny2
質問者

お礼

回答ありがとうございます。 短ければいいというものではないのですね。 今度からは気をつけます。 コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) この部分で実行エラーになってしまうのですが、間違った書き方してますでしょうか? よろしくお願いします。

その他の回答 (2)

  • FEX2053
  • ベストアンサー率37% (7991/21371)
回答No.3

「実行エラー438」で検索すればこんなのが出て来ます。 http://officetanaka.net/excel/vba/error/execution_error/error_438.htm 要は、そんなコードは無いって話で、書いてあるコードの どれかが「実際には無い」ものだった・・・って話です。 私の書いたコードで、同じエラーが出れば「Do Until」が 直接原因ですが、多分原因はそっちじゃないでしょう。 もっとも「Do Until」にも問題があるのは自明ですが、 それではこのエラーは出ないと思いますので。 エラーするなら、コードは分解して、1ステップずつチェック。 これ、コーディングの原則ですよ。

whitebunny2
質問者

お礼

返事が遅くなってしまってすみません。 >エラーするなら、コードは分解して、1ステップずつチェック。 これ、コーディングの原則ですよ。 おっしゃる通りです。 問題の箇所を見直したところ、動いてくれました。 ありがとうございました。

  • x-1919
  • ベストアンサー率52% (91/173)
回答No.2

コードがものすごくわかりづらいけれど、 > Do Until IsEmpty(Cells(行数, 3).Value) たぶんこれが原因だと思う。 ここで言っている "Cells" がどのブックのどのシートの "Cells" として処理されるかご存知か? おそらくあなたがイメージしているブック & シートとは違うところにあるセルを読み込もうとしているのだと思う。 その結果、コピー対象となるシート名じゃない値が変数 "コピー元" に入ってしまい、存在しない名前のシートをコピーしようとしてエラーになる、と。

whitebunny2
質問者

お礼

回答ありがとうございます。 分からないことが多々あるので、もう一度基礎から勉強しないといけないと改めて思いました。 Do Until IsEmpty(Cells(行数, 3).Value) 指摘をうけたこの部分ですが、一度消して繰り返しなしで、cells(2,3)のシート名がコピー出来るかテストしたところ、別の箇所でとまりました。 コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) ここで実行エラー438と出ました。 変数に出来ないのでしょうか?ちなみにエクセル2000です。 よろしくお願いします。

関連するQ&A