アプリケーションとしてのVBA Excel(エクセル) VBA の役立つ Tips の紹介

アプリケーションとしてのVBA

シートのデータを別のシートにコピーする

◆シートのデータを別のシートにコピーする


  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 プロパティで表全体を選択できます。

 




Copy (C) 2005   アプリケーションとしてのVBA   All Rights Reserved.