この記事では、VBAを使ってセルやセルの値だけ、書式をコピーする方法を実際のVBAコードも含めて説明します。
セルのコピーは、日常的なExcelの業務でも多用するようにVBAの基本的動作のひとつです。
セルやセルの値だけ、書式、それぞれをセルからコピーするためのVBAコードを紹介しますので、ご参考になれば幸いです。
セルのコピーについては、変数を使いません。疑問に感じる方がいらっしゃるかもしれませんが、VBAのコピーの操作は実際に人間が行うそれと同様です。つまり、パソコンのクリップボードを使うため、変数は不要なのです。
VBA│セルをコピーする
この章では、ExcelのセルA1をコピーしてセルB1に貼り付けるVBAコードを紹介します。Excelで日常的に行っている「Ctrl + C」と同等の結果を返すVBAコードです。
基本構文
object . Copy Destination:=object
- object = コピー対象のセル位置
この例では、A1です - Copy = コピーする定型文
- Destination : = Copyメソッドの引数
- object = ペースト対象のセル位置
この例では、B1です
Rangeプロパティ
Sub Sample()
Range(“A1”).Copy Destination:=Range(“B1”)
End Sub
Cellsプロパティ
Sub Sample()
Cells( 1, 1 ).Copy Destination:=Cells ( 1, 2 )
End Sub
VBA│セルの値だけコピーする
この章では、ExcelのセルA1の値だけコピーして、セルB1に貼り付けるVBAコードを紹介します。Excelで使う「値貼り付け」と同等の結果を返すVBAコードです。
基本構文
object . Value object . Value
- object = ペースト対象のセル位置
この例では、B1です - Value = ペーストする定型文
(Valueは値を代入するプロパティです) - object = コピー対象のセル位置
この例では、A1です - Value = コピーする定型文
Rangeプロパティ
Sub Sample()
Range(“B1”).Value = Range(“A1”).Value
End Sub
Cellsプロパティ
Sub Sample()
Cells( 1, 2 ).Value = Cells( 1, 1 ).Value
End Sub
VBA│セルの書式だけコピーする
この章では、ExcelのセルA1の書式だけコピーして、セルB1に貼り付けるVBAコードを紹介します。Excelで使う「書式貼り付け」と同等の結果を返すVBAコードです。
基本構文
その1_PasteSpecial
object . PasteSpecial
- object = ペースト対象のセル位置
この例では、B1です - PasteSpecial = 形式を選択して貼り付けるメソッド
その2_NumberFormat
object . NumberFormat = object . NumberFormat
- object = コピー・ペースト対象のセル位置
この例では、A1・B1です - NumberFormat = 表示形式を表すプロパティ
Rangeプロパティ
PasteSpecial
Sub Sample()
Range(“A1”).Copy
Range(“B1”).PasteSpecial Paste: = xlPasteFormats
End Sub
NumberFormat
Sub Sample()
Range(“B1”).NumberFormat = Range(“A1”).NumberFormat
End Sub
Cellsプロパティ
PasteSpecial
Sub Sample()
Cells( 1, 1 ).Copy
Cells( 1, 2 ).PasteSpecial Paste: = xlPasteFormats
End Sub
NumberFormat
Sub Sample()
Cells( 1, 2 ) .NumberFormat = Cells( 1, 1 ) .NumberFormat
End Sub
応用編:最終行を変数で取得しコピーする
最終行のセルをコピーする
前節までは、コピー対象のセルをすべてVBAコード内で、直接、指定していましたが、VBAの最終行を取得するコードと組み合わせて、B列の最終行のセルをVBAでコピーする実用的なコードを記述してみましょう。
B列最終行のセルをコピーしたあとは、セルD1に貼り付けます。
Sub Sample()
Dim LastRow As Long
LastRow = Range(“B1”).End(xlDown).Row
Range(“B” & LastRow).Copy Destination:=Range(“D1”)
End Sub