[[20041121004147]] 『VBAで Range の指定』(とんとん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBAで Range の指定』(とんとん)

 ワークシート間でコピーをしようとして次のコードを書くと、test1 では問題なく動くのですが、test2 ではエラーになります。

 Sub test1()
    Worksheets("Sheet1").Range("A1:C1").Copy
    Worksheets("Sheet2").Range("A1:C1").PasteSpecial Paste:=xlPasteValues
 End Sub

 Sub test2()
    Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 3)).Copy
    Worksheets("Sheet2").Range(Cells(1, 1), Cells(1, 3)).PasteSpecial Paste:=xlPasteValues
 End Sub

 なお、次のようにするとエラーにならないことは確認しました。

 Sub test3()
    Worksheets("Sheet1").Activate
    Worksheets("Sheet1").Range(Cells(1, 1), Cells(1, 3)).Copy
    Worksheets("Sheet2").Activate
    Worksheets("Sheet2").Range(Cells(1, 1), Cells(1, 3)).PasteSpecial Paste:=xlPasteValues
 End Sub

 Range("A1:C1") と Range(Cells(1, 1), Cells(1, 3)) は同じことだと思っていたのですが、なぜエラーになるのでしょうか?


  Sub test2()
    Range(Worksheets("Sheet1").Cells(1, 1), Worksheets("Sheet1").Cells(1, 3)).Copy
    Range(Worksheets("Sheet2").Cells(1, 1), Worksheets("Sheet2").Cells(1, 3)).PasteSpecial Paste:=xlPasteValues
 End Sub

 Cellsプロパティでは、各々にシートを指定するようです。
 ※アクティブなシートは指定する必要はありませんが。
 (川野鮎太郎)


 Cellsプロパティの問題でしたか。了解しました。
 ありがとうございました。

 (とんとん)


 Sub test2()
    Worksheets("Sheet1").Range(Worksheets("Sheet1").Cells(1, 1), Worksheets("Sheet1").Cells(1, 3)).Copy
    Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(1, 1), Worksheets("Sheet2").Cells(1, 3)).PasteSpecial Paste:=xlPasteValues
 End Sub

 とすればエラーが出ないことを確認しました。Cellsプロパティの性質だと納得できました。
 でも、直前に Worksheets("Sheet1"). ときている直後の Cells なので、Worksheets("Sheet1").Cells(1, 1) などとしなくても "Sheet1" のセルだと認識してほしい気がしました。

(とんとん)


 Withを使うと、ちょっと見やすくなりそうですね。

    With Worksheets("Sheet1")
        .Range(.Cells(1, 1), .Cells(1, 3)).Copy
    End With
    With Worksheets("Sheet2")
        .Range(.Cells(1, 1), .Cells(1, 3)).PasteSpecial Paste:=xlPasteValues
    End With

 それだけ。
(ご近所PG)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.