[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.