更新日:、 作成日:
VBA 行をコピーして貼り付ける
はじめに
Excel VBA マクロの行をコピーして貼り付ける方法を紹介します。
Rows(2).Copy または Range("A2").EntireRow.Copy メソッドから、行「2」をコピーできます。
Rows(3).PasteSpecial または Range("A3").PasteSpecial メソッドから、行「3」に貼り付けできます。形式を選択して貼り付けと同じように、値や書式だけを貼り付けられます。
行をコピーして貼り付ける
Rows の引数に行番号を指定すると、その行をコピーして貼り付けできます。
行「2」をコピーするには Rows(2).Copy を入力します。
行「3」に貼り付けるには Rows(3).PasteSpecial(xlPasteAll) を入力します。
Rows(2).Copy ' 行をコピー
Rows(3).PasteSpecial (xlPasteAll) ' 貼り付け
Application.CutCopyMode = False ' コピーモードを解除
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 | コメントとメモ |
xlPasteValidation | 6 | 入力規則 |
xlPasteAllExceptBorders | 7 | 罫線を除くすべて |
xlPasteColumnWidths | 8 | 列幅 |
xlPasteFormulasAndNumberFormats | 11 | 数式と数値の書式 |
xlPasteValuesAndNumberFormats | 12 | 値と数値の書式 |
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 メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。
クリップボードにコピーしない
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 ~ 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 の行をコピー
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)
スポンサーリンク