◆シートのデータを別のシートにコピーする
VBA で作成するマクロは、Excel の表の操作が主体になります。
セルの操作が main ですが、表の一部を別のシートにコピーすることも良くあります。
まとめてコピーする方法の説明です。
Sheet1 から Sheet2 へのコピーを、マクロ記録させると、
こんな感じでしょうか。
Sub test1()
Sheets(1).Select
Range("B3:G7").Select
Selection.Copy
Sheets(2).Select
Range("B3:G7").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
これで十分動作するのですが、ループの中で動作させると、シートの選択を
何回も繰り返すので、画面が頻繁に動いてうざったいです。
スピードも遅くなります。
そこで、シートを指定して、下記のように変更してみます。
Sub test2()
Sheets(1).Select
Range("B3:G7").Select
Selection.Copy
Sheets(2).Range("B3:G7").Paste
Application.CutCopyMode = False
End Sub
このコードはコンパイルは OK ですが、実際に動作させると、
「実行時のエラー
オブジェクトは、このプロパティまたはメソッドをサポートしていません」
が発生します。
使えません。
Copyメソッドはクリップボードにデータをコピーするため、
現在選択されているシートにしか適用できないからです。
これを回避するには、下記のようにします。
Sub test3()
Dim CopySource, PasteDist As Range
Set CopySource = Sheets(1).Range("B3:G7")
Set PasteDist = Sheets(2).Range("B3:G7")
PasteDist = CopySource
End Sub
こっちの方がスマートですね。
でも、もっとすっきりする方法があるんです。
Sub test4()
Sheets(1).Range("B3:G7").Copy Sheets(2).Range("B3")
End Sub
Sub test5()
Sheets(1).Range("B3").CurrentRegion.Copy Sheets(2).Range("B3")
End Sub
どうですか。1行で書けます。
CurrentRegion プロパティで表全体を選択できます。