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