• 締切済み

エクセル 特定のシートを異なるブックの指定したシートにコピーするマクロ

エクセルの"貼り付け先.xls"の(シート名="集計")を開いている状態で、 別の異なるブックの"貼り付け元.xls"の(シート名="sheet1")の内容を全部コピーして "貼り付け先.xls"の(シート名="集計元データ")へ貼り付けるマクロは どのようになりますでしょうか? いろいろ調べて下記のように書きましたが、 インデックスが有効範囲にありませんというメッセージが出て、 デバッグを確認すると Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_の部分が黄色く表示されてきます。 (1) "貼り付け先.xls"と"貼り付け元.xls"は同じパソコンのマイドキュメントに保存されています。 (2)"貼り付け元.xls"の"Sheet1"はセルA1から入力されていて、 内容は毎日変わります。 (3)Range("A1")や("A1:IV65536")のセル番地をいろいろ変えたりしても同じでした。 Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ.xls").Range ("A1:IV65536") End Sub

みんなの回答

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.5

NO4、onlyromです。 >Workbooks("貼り付け元.xls").Worksheets("Sheet1").Cells.Copy_ が黄色くマーキングされています Cells.Copy_ この最後の _ の前にスペースが必要です。 _ の意味がお分かりではないようですね? _ は、1行のステートメントの途中から改行するためのものです。 シート名.Cells.Copy  スペース1個 _ シート名.Range ("A1") お試しください。

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.4

貼り付け先.xls だけではなく、 貼り付け元.xls も開いた状態でないとエラーになります。 要するに両方とも開いた状態でないと Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ").Range ("A1:IV65536") コードの間違いは別にして、このようなCopyはできないということです。 全セルコピーなら、 Range("A1").Copyではなくて、Cells.Copyです。 そして貼り付け先には、Range("A1")を使います Sub Test() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Cells.Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ").Range ("A1") End Sub 両方開いた状態で上記を実行してみてください。   それから開いてないブックを使いたいときは、   WorkBooks.Open "開きたいブック.xls" としてコードで開いてから処理します。  

hyunndai
質問者

補足

早速のご回答ありがとうございます。 今、2つのブックを開いた状態でためしたのですが、 実行時エラー438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 と出て、デバッグをクリックすると Workbooks("貼り付け元.xls").Worksheets("Sheet1").Cells.Copy_ が黄色くマーキングされています。 また、上記の作業とは別に WorkBooks.Open "貼り付け元.xls"を行うとファイルはきちんと開きましたので”貼り付け元.xls”のファイルがおかしいわけではないと思います。

  • fish-rd
  • ベストアンサー率0% (0/0)
回答No.3

#2の補足を拝見したのですが、 やりたいことって、 貼り付け元のシートのデータを 貼り付け元とは異なるBOOKで シートを指定して貼り付けるということですよね? だとするとセル番号指定するコードは ("A1")のところは("A1:IV65536")となって↓のようになるのでは? Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1:IV65536").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ").Range ("A1:IV65536") End Sub

hyunndai
質問者

補足

仰るとうりです。 何度もすみません。 ただ、このコードでも同じ結果なのです。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

#1でご指摘の問題と 下記では Copy_のCopyのあとのアンダースコア?を訂正してます。 ここはおかしいのでは。 同一ブック内の別シートに変えてのテストですが Sub test01() Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1:IV65536") End Sub を実行すると、実行はうまくいきました。 Sheet1のA1にAAと入れて実行すると、Sheet2の全セルの値ががAAになりましたが、そういうので内容は良いのかな。 そんなことすることはまず無いように思うが。」

hyunndai
質問者

補足

早速のアドバイスありがとうございます。 >Sheet1のA1にAAと入れて実行すると、Sheet2の全セルの値ががAAになりましたが やりたいことは上記のようなことを同一ではなく異なるブックにコピーしたいのです。 また、Copy_のCopyのあとのアンダースコアはいらないのでしょうか? アンダースコアをはずして異なるブックへのコピーを実行してみましたが、結果は同じでした。 なにぶんにもVBA初心者なもので下記のサイトの http://www.geocities.jp/happy_ngi/YNxv209.html 1)すべてコピー、切り取りするの項目の Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() を参考にしたのですが、なにかご指摘がございましたら よろしくお願いいたします。

  • fish-rd
  • ベストアンサー率0% (0/0)
回答No.1

マクロ文 Worksheets("集計元データ.xls")の部分は Worksheets("集計元データ")では?

hyunndai
質問者

補足

早速のご指摘ありがとうございます。 そのとうりです。すみませんでした。 Sub クリップボードを経由せずにコピー貼り付けする_異なるブック() Workbooks("貼り付け元.xls").Worksheets("Sheet1").Range("A1").Copy_ Workbooks("貼り付け先.xls").Worksheets("集計元データ").Range ("A1:IV65536") End Sub

関連するQ&A