サイトについて      連絡先   検索

VBA 行をコピーする

はじめに

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

Rows.Copy メソッドまたは Range.Copy メソッドで行をコピーできます。

Rows.PasteSpecial メソッドまたは Range.PasteSpecial メソッドで貼り付けできます。

  • 目次
    • 行をコピーする
    • 行の範囲をコピーする
    • 指定したシートの行をコピーする

行をコピーする

Rows の引数に行番号を指定すると、その行をコピーできます。

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

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


Rows(2).Copy
Rows(3).PasteSpecial (xlPasteAll)
1

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

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


Range("B2").EntireRow.Copy
Range("B3").EntireRow.PasteSpecial (xlPasteAll)

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

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

Copy でセルをコピーすると Excel がコピーモードになります。

2

Application.CutCopyMode に False を設定すると、これを解除できます。


Rows(2).Copy
Rows(3).PasteSpecial
Application.CutCopyMode = False ' コピーモードを解除

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

Copy の引数から指定したセルに貼り付けできます。値や書式など全てが貼り付けられます。このときはコピーモードにならず、クリップボードにもコピーされません。

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


Call Rows(2).Copy(Rows(3)) ' 3 行目に貼り付け

行の範囲をコピーする

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


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

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

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


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)
  • 目次
    • 行をコピーする
    • 行の範囲をコピーする
    • 指定したシートの行をコピーする