プロが教える店舗&オフィスのセキュリティ対策術

こんにちは。
Excel VBAの初心者です。
セルコピーについて教えてください。

シート1のセル範囲e4~aj4を、シート2の同じ場所に、そのままコピーします。
Worksheets(1).Range("e4:aj4").Copy Destination:=Worksheets(2).Range("e4:aj4")

上記だと普通に通るのですが、コピー元の行に変数を使用したくて、その前に一度下のように書き換えました。
Worksheets(1).Range(Cells(4, 5), Cells(4, 36)).Copy Destination:=Worksheets(2).Range(Cells(4, 5), Cells(4, 36))

するとエラー1004(アプリケーション定義またはオブジェク定義のエラー1004(アプリケーション定義またはオブジェク定義のエラー)が出て、通らなくなります。
単純なことだと思うのですが、初心者ゆえ困っております。
どなたかご教示いただけますと幸いです。
よろしくお願いいたします。

A 回答 (3件)

コピー先の左上隅のセル(1セルだけ)指定するのがよい。

Destinationの書き方の問題。
Sub test02()
Worksheets(1).Range(Cells(4, 1), Cells(4, 4)).Copy Destination:=Worksheets(2).Cells(4, 5)
End Sub
ーー
本件には関係ないかと思うがRange(Cells()、Cells))では、左上隅、右下隅のセルを、シートまで具体的に指定するようにしないとエラーが出る場合がある。コピ元とコピー先で2つのシートにまたがっている場合など注意。
ーー
こんな記事もあるよ。参考。
http://officetanaka.net/excel/vba/cell/cell09.htm
    • good
    • 1
この回答へのお礼

ありがとうございます。
URLも参考にさせていただきます。

実は皆様に教えていただいたとおり修正した上で、更にコピー元・先のシート指定をしても通らず、頭を抱えていたのですが、『Range(Cells(),Cells())のコピーはシート指定をしないと駄目な場合あり』というアドバイスをヒントに、コピー元シートをactivateしたところ、無事通りました!
Range()のときは、activateなしでそのまま普通に通っていたので、このアドバイスがなかったら全く辿りつかなかったと思います。

今回はこちをベストにさせていただきました。
助かりました!

お礼日時:2011/09/14 19:27

Copyメソッドは、コピー&ペースト操作と同様ですから、代入とは違いペースト先でよいので次ようなコードになります。


Worksheets(1).Range("E4:AJ4").Copy Worksheets(2).Range("E4")
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考にさせていただきました。

お礼日時:2011/09/14 19:15

Worksheets(1).Range(Cells(4, 5), Cells(4, 36)).Copy Destination:=Worksheets(3).Cells(4, 5)




これで良いと思います。
    • good
    • 0
この回答へのお礼

いち早くありがとうございます。
大変参考になりました。

お礼日時:2011/09/14 19:14

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