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

VBA セルをコピーする

はじめに

Excel VBA のセルをコピーする方法を紹介します。

Range.Copy メソッドか Cells.Copy メソッドでセルをコピーできます。

Range.PasteSpecial メソッドか Cells.PasteSpecial メソッドで貼り付けできます。

セルをコピーする

Range の引数にセル名を指定すると、そのセルをコピーできます。

セル「A1」をコピーするには Range("A1").Copy のように指定します。

セル「B1」に貼り付けるには Range("B1").PasteSpecial(xlPasteAll) のように指定します。

Range("A1").Copy
Range("B1").PasteSpecial (xlPasteAll)
1

Cells の引数にセルの行と列の番号を指定すると、そのセルの書式をコピーできます。

行「2」、列「A」の書式をコピーするには Cells(2, 1).Copy のように指定します。

s = Cells(1, 1).Copy ' A1
s = Cells(2, 1).Copy ' A2
s = Cells(1, 2).PasteSpecial (xlPasteAll) ' B1
s = Cells(2, 2).PasteSpecial (xlPasteAll) ' B2

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 を設定するとコピーモードを解除できます。

Range("A1").Copy
Range("B1").PasteSpecial (xlPasteAll)
Application.CutCopyMode = False

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

セル「A1」を「B2」にコピーするには Range("A1").Copy(Range("B2")) のように指定します。

Call Range("A1").Copy(Range("B2")) ' B2 へ貼り付け
Call Range("A1").Copy(Range("B2:C3")) ' 「B2」~「C3」へ貼り付け

セルの範囲をコピーする

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

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

Call Range("A1:B2").Copy(Range("A3"))
2

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

指定したシートのセルをコピーする

Range.Copy とコードに書くと、アクティブなシートのセルをコピーします。これは ActiveSheet.Range.Copy の ActiveSheet が省略されています。

' どちらも同じコード
Range("A1").Copy
ActiveSheet.Range("A1").Copy

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

1

Sheet1 のシートを指定するには、Sheets("Sheet1") か Sheets(1) と書きます。

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

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

関連ページ