• ベストアンサー

Excel VBAでセル範囲のコピー、貼り付け方法

VBA初心者です。 今、Excel VBAでセル範囲を他のBookからコピーして張り付けるマクロを記述を次のように ThisWorkbook.Worksheets(2).Range(Cells(203 + ki, 5), Cells(203 + ki, 7)) = wkd.Worksheets(3).Range("M82:082") 書くとエラーになってしまいます。 セルが範囲でなくて、1つだとうまくいくのですが、範囲にするとエラーになってしまいます。 どうしたら、解決できますか、できるだけ簡単な記述でお願いします。

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんにちは。 すでに、指摘はありますが、エラー自体は、オー(0) とゼロ(0)の間違いだと思います。 それと、Range オブジェクトの引数の、Cells プロパティは、親オブジェクトとは繋がっていませんから、つなげてやらないといけません。基本的なことですが、そのコードでは、モジュールやActiveSheet の条件によってエラーになりますから、ひとつずつ親オブジェクトを入れても良いのですが、以下のように、With ステートメントを使って入れます。 なお、値貼り付けするなら、Copy しておいて、PasteSpecial (xlPasteValues) でも良いです。 '-------------------------------------------  Dim wkd As Workbook  Dim ki As Long  Set wkd = Workbooks("Test1.xls")  ki = 5  With ThisWorkbook.Worksheets(2)   .Range(.Cells(203 + ki, 5), .Cells(203 + ki, 7)).Value _    = wkd.Worksheets(3).Range("M82:O82").Value  End With

ganchan59
質問者

補足

回答ありがとうございます。 うまくできました。 Withステートメントが必要なのですね、ありがとうございました。

その他の回答 (2)

  • xls88
  • ベストアンサー率56% (669/1189)
回答No.2

>セルが範囲でなくて、1つだとうまくいくのですが、範囲にするとエラーになってしまいます。 エラーの内容も提示して相談するようにしてください。 構文は間違ってはいないと思います。 ただ、転記ミスかもしれませんが、提示されたコードで右辺の wkd.Worksheets(3).Range("M82:082") でセルの列番地が数字の0(ゼロ)になっています。 アルファベットのO(オー)と間違っているようです。 念のため、元のコードはどうなっているか調べてみてください。

回答No.1

以下の記述でコピーできます。 例)Sheet1のA1~B2をSheet2のC1~D2へコピー Sheet1.Range(Cells(1, 1), Cells(2,2)).Copy Destination:=Sheet2.Cells(1, 3)

ganchan59
質問者

補足

早速の回答ありがとうございます。 何とかできました。