PCメモ

Excelを中心とした業務改善の記録

VBA100本ノック1本目:セルのコピー

出題内容

「Sheet1」のA1:C5のセル範囲を、「Sheet2」のA1:C5にコピーしてください。
値も数式も書式も全てコピーしてください。 ただしSelectメソッドは使用禁止
※行高と列幅の設定はしなくて良い。

 

f:id:abv72:20210404212832p:plain

 

excel-ubara.com

 

回答

Sub vba001()
 Sheets("Sheet1").Range("A1:C5").Copy _
  Destination:=Sheets("Sheet2").Range("A1")
End Sub

 Destinationは省略できる。

 

形式を指定して貼り付ける場合

Sheets("Sheet1").Range("A1:C5").Copy
Sheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteAll
Application.CutCopyMode = False

一旦クリップボードに保存される。
マクロ実行中にPCを操作すると正しく動作しなくなる。

 

コピー範囲・貼付範囲を変数に格納。
コピー範囲はデータ量に応じて行数を変動させる。

Sub vba001()

 Dim LastRow As Long
 Dim コピー範囲 As Range
 Dim 貼付範囲 As Range
 LastRow = Cells(Rows.Count, 1).End(xlUp).Row
 Set コピー範囲 = Sheets("Sheet1").Range("A1:C" & LastRow)
 Set 貼付範囲 = Sheets("Sheet2").Range("A1")

 コピー範囲.Copy 貼付範囲

End Sub

 

 

【PasteSpecialメソッド】

excel-ubara.com