VBA セルをコピーする (Range.Copy)

はじめに

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

Range("B1").Copy または Cells(1, 2).Copy メソッドから、セル「B1」をコピーできます。

Range("B1").PasteSpecial メソッドから、セルに貼り付けできます。形式を選択して貼り付けと同じように、値や書式だけを貼り付けられます。

4
コピーしたセルを挿入するには「セルを挿入する」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。
  • 目次
    • セルをコピーする
    • セルの範囲をコピーする
    • 別シートのセルをコピーする

セルをコピーする

Range の引数にセル名を指定すると、そのセルをコピーして貼り付けできます。

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

セル「B1」に貼り付けるには Range("B1").PasteSpecial(xlPasteAll) を入力します。

Range("A1").Copy                      ' セルをコピー
Range("B1").PasteSpecial (xlPasteAll) ' 貼り付け
Application.CutCopyMode = False       ' コピーモードを解除
1

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

行「2」、列「A」をコピーするには Cells(2, 1).Copy を入力します。

行「2」、列「B」に貼り付けるには Cells(2, 2).PasteSpecial(xlPasteAll) を入力します。

Cells(1, 1).Copy ' A1
Cells(1, 2).PasteSpecial (xlPasteAll) ' B1
Cells(2, 1).Copy ' A2
Cells(2, 2).PasteSpecial (xlPasteAll) ' B2
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すべての結合されている条件付き書式
Range("A1").Copy 
Range("B1").PasteSpecial                   ' すべて
Range("B2").PasteSpecial (xlPasteFormulas) ' 数式を貼り付け
Range("B3").PasteSpecial (xlPasteValues)   ' 値を貼り付け
Range("B4").PasteSpecial (xlPasteFormats)  ' 書式を貼り付け
Application.CutCopyMode = False

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

2

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

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

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

Call Range("A1").Copy(Range("B2")) ' A1 → B2 へ貼り付け

セルの範囲をコピーする

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

Range("A1:B2").Copy
Range("A1", "B2").Copy

Range("A3").PasteSpecial
' A1 → A3 に貼り付け
' A2 → A4 に貼り付け
' B1 → B3 に貼り付け
' B2 → B4 に貼り付け
Application.CutCopyMode = False
2

セルの範囲「A1」~「B2」を「A3」に貼り付けると、セルの範囲「A3」~「B4」に貼り付けられます。これは Excel の操作と同じです。

セル「A1」をコピーして、セルの範囲「A3」~「B4」に貼り付けるには Range("A3:B4").PasteSpecial を入力します。

Range("A1").Copy

Range("A3:B4").PasteSpecial
Range("A3", "B4").PasteSpecial
' A1 → A3 に貼り付け
' A1 → A4 に貼り付け
' A1 → B3 に貼り付け
' A1 → B4 に貼り付け
Application.CutCopyMode = False

行列を入れ替えて貼り付け

PasteSpecial の Transpose 引数に True を指定して、コピーしたセルの範囲の行と列を入れ替えて貼り付けできます。

Range("A1:B2").Copy

Call Range("A3").PasteSpecial(xlPasteAll, Transpose:=True)
' A1 → A3 に貼り付け
' A2 → B3 に貼り付け
' B1 → A4 に貼り付け
' B2 → B4 に貼り付け
Application.CutCopyMode = False

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

Call Range("A1:B2").Copy(Range("A3"))
' A1 → A3 に貼り付け
' A2 → A4 に貼り付け
' B1 → B3 に貼り付け
' B2 → B4 に貼り付け

Call Range("A1").Copy(Range("A3:B4"))
' A1 → A3 に貼り付け
' A1 → A4 に貼り付け
' A1 → B3 に貼り付け
' A1 → B4 に貼り付け

別シートのセルをコピーする

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

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

sheet1
' Sheet1 のセル「A1」をコピー
Worksheets("Sheet1").Range("A1").Copy
Worksheets("Sheet1").Range("B1").PasteSpecial
Worksheets(1).Range("A1").Copy
Worksheets(1).Range("B1").PasteSpecial

' Sheet2 のセル「A1」をコピー
Worksheets("Sheet2").Range("A1").Copy
Worksheets("Sheet2").Range("B1").PasteSpecial
Worksheets(2).Range("A1").Copy
Worksheets(2).Range("B1").PasteSpecial

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

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

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

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"