VBA 行をコピーして貼り付ける

はじめに

Excel VBA マクロの行をコピーして貼り付ける方法を紹介します。

Rows(2).Copy または Range("A2").EntireRow.Copy メソッドから、行「2」をコピーできます。

Rows(3).PasteSpecial または Range("A3").PasteSpecial メソッドから、行「3」に貼り付けできます。形式を選択して貼り付けと同じように、値や書式だけを貼り付けられます。

4
コピーした行を挿入するには「行を挿入する」をご覧ください。
行を指定して取得するには「行を取得する」をご覧ください。
  • 目次
    • 行をコピーして貼り付ける
    • 行の範囲をコピーして貼り付ける
    • 別シートの行をコピーして貼り付ける

行をコピーして貼り付ける

Rows の引数に行番号を指定すると、その行をコピーして貼り付けできます。

行「2」をコピーするには Rows(2).Copy を入力します。

行「3」に貼り付けるには Rows(3).PasteSpecial(xlPasteAll) を入力します。

Rows(2).Copy                      ' 行をコピー
Rows(3).PasteSpecial (xlPasteAll) ' 貼り付け
Application.CutCopyMode = False   ' コピーモードを解除
1

Range の引数にセル名を指定すると、そのセルを取得できます。EntireRow からその行を取得できます。

セル「B2」の行をコピーするには Range("B2").EntireRow.Copy を入力します。

Range("B2").EntireRow.Copy
Range("B3").EntireRow.PasteSpecial (xlPasteAll)
Application.CutCopyMode = False

PasteSpecial の引数に、貼り付ける形式を指定できます。

定数名 説明
xlPasteAll (既定)-4104すべて
xlPasteFormulas-4123数式
xlPasteValues-4163
xlPasteFormats-4122書式
xlPasteComments-4144コメントとメモ
xlPasteValidation6入力規則
xlPasteAllExceptBorders7罫線を除くすべて
xlPasteColumnWidths8列幅
xlPasteFormulasAndNumberFormats11数式と数値の書式
xlPasteValuesAndNumberFormats12値と数値の書式
xlPasteAllUsingSourceTheme
(Excel 2007 以降)
13コピー元のテーマを使用してすべて貼り付け
xlPasteAllMergingConditionalFormats
(Excel 2010 以降)
14すべての結合されている条件付き書式
Rows(1).Copy 
Rows(2).PasteSpecial                   ' すべて
Rows(3).PasteSpecial (xlPasteFormulas) ' 数式を貼り付け
Rows(4).PasteSpecial (xlPasteValues)   ' 値を貼り付け
Rows(5).PasteSpecial (xlPasteFormats)  ' 書式を貼り付け
Application.CutCopyMode = False

Application.CutCopyMode に False を設定しているのは、Copy メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。

2

クリップボードにコピーしない

Copy メソッドを実行するとクリップボードにもコピーされます。Copy の引数にセルを指定すると、クリップボードにコピーしないでそのセルに貼り付けできます。すべての形式が貼り付けられ、コピーモードにもなりません。

行「2」を「3」にコピーするには Rows(2).Copy(Rows(3)) を入力します。

Call Rows(2).Copy(Rows(3)) ' 2 → 3 行目に貼り付け
Call Range("B2").EntireRow.Copy(Range("B3").EntireRow) ' 2 → 3 行目に貼り付け

行の範囲をコピーして貼り付ける

行の範囲「2 ~ 3」をコピーするには Range("2:3").Copy または Range("2:2", "3:3").Copy を入力します。

' 2 ~ 3 行目をコピー
Range("2:3").Copy
Range("2:2", "3:3").Copy
Range(Rows(2), Rows(3)).Copy
Range("A2:A3").EntireRow.Copy

Range("4:4").PasteSpecial 
' 2 → 4 行目に貼り付け
' 3 → 5 行目に貼り付け
Application.CutCopyMode = False
2

行の範囲「2 ~ 3」を「4」に貼り付けると、行の範囲「4 ~ 5」に貼り付けられます。これは Excel の操作と同じです。

行「1」をコピーして、行の範囲「3」~「4」に貼り付けるには Range("3:4").PasteSpecialを入力します。

Range("1:1").Copy

Range("3:4").PasteSpecial
' 1 → 3 行目に貼り付け
' 1 → 4 行目に貼り付け
Application.CutCopyMode = False

クリップボードにコピーしない

Call Range("2:3").Copy(Range("4:4")) 
' 2 → 4 行目に貼り付け
' 3 → 5 行目に貼り付け

Call Range("2:2").Copy(Range("3:4")) 
' 2 → 3 行目に貼り付け
' 2 → 4 行目に貼り付け

別シートの行をコピーして貼り付ける

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
' Sheet1 の行をコピー
Worksheets("Sheet1").Rows(1).Copy
Worksheets("Sheet1").Rows(2).PasteSpecial
Worksheets(1).Rows(1).Copy
Worksheets(1).Rows(2).PasteSpecial

' Sheet2 の行をコピー
Worksheets("Sheet2").Rows(1).Copy
Worksheets("Sheet2").Rows(2).PasteSpecial
Worksheets(2).Rows(1).Copy
Worksheets(2).Rows(2).PasteSpecial

Sheet1 に Rows を入力すると、自身のシートの行になります。自身を表す Me. が省略されています。

' どちらも同じコード
Dim r As Range
Set r = Rows(1)
Set r = Me.Rows(1)

標準モジュールに Rows を入力すると、開いているシートの行になります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Dim r As Range
Set r = Rows(1)
Set r = ActiveSheet.Rows(1)