VBA 列をコピーして貼り付ける

はじめに

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

Columns(2).Copy または Range("B1").EntireColumn.Copy メソッドから、列「B」をコピーできます。

Columns(3).PasteSpecial または Range("C1").PasteSpecial メソッドから、列「C」に貼り付けできます。形式を選択して貼り付けと同じように、値や書式だけを貼り付けられます。

4
コピーした列を挿入するには「列を挿入する」をご覧ください。
列を指定して取得するには「列を取得する」をご覧ください。
  • 目次
    • 列をコピーして貼り付ける
    • 列の範囲をコピーして貼り付ける
    • 別シートの列をコピーして貼り付ける

列をコピーして貼り付ける

Columns の引数に列番号または列名を指定すると、その列をコピーできます。

列「B」をコピーするには Columns(2).Copy または Columns("B").Copy を入力します。

列「C」に貼り付けるには Columns(3).PasteSpecial(xlPasteAll) または Columns("C").PasteSpecial(xlPasteAll) を入力します。

Columns(2).Copy                       ' B 列をコピー
Columns(3).PasteSpecial (xlPasteAll) ' C 列に貼り付け
Columns("B").Copy
Columns("C").PasteSpecial (xlPasteAll)
Application.CutCopyMode = False      ' コピーモードを解除
1

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

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

Range("B1").EntireColumn.Copy
Range("C1").EntireColumn.PasteSpecial (xlPasteAll)
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すべての結合されている条件付き書式
Columns(1).Copy 
Columns(2).PasteSpecial                   ' すべて
Columns(3).PasteSpecial (xlPasteFormulas) ' 数式を貼り付け
Columns(4).PasteSpecial (xlPasteValues)   ' 値を貼り付け
Columns(5).PasteSpecial (xlPasteFormats)  ' 書式を貼り付け
Application.CutCopyMode = False

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

2

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

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

列「B」を「C」にコピーするには Columns(2).Copy(Columns(3)) または Columns("B").Copy(Columns("C")) を入力します。

Call Columns(2).Copy(Columns(3))     ' B → C 列に貼り付け
Call Columns("B").Copy(Columns("C")) ' B → C 列に貼り付け
Call Range("B1").EntireColumn.Copy(Range("C1").EntireColumn) ' B → C 列に貼り付け

列の範囲をコピーして貼り付ける

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

Range("B:C").Copy                  
Range("B:B", "C:C").Copy
Range(Columns(2), Columns(3)).Copy
Range("B1:C1").EntireColumn.Copy

Range("D:D").PasteSpecial 
' B → D 列に貼り付け
' C → E 列に貼り付け
Application.CutCopyMode = False
2

列の範囲「B ~ C」を「D」に貼り付けると、列の範囲「D ~ E」に貼り付けられます。これは Excel の操作と同じです。

列「A」をコピーして、列の範囲「C」~「D」に貼り付けるには Range("C:D").PasteSpecialを入力します。

Range("A:A").Copy

Range("C:D").PasteSpecial
' A → C 列目に貼り付け
' A → D 列目に貼り付け
Application.CutCopyMode = False

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

Call Range("B:C").Copy(Range("D:D"))
' B → D 列に貼り付け
' C → E 列に貼り付け

Call Range("B:B").Copy(Range("C:D"))
' B → C 列に貼り付け
' B → D 列に貼り付け

別シートの列をコピーして貼り付ける

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

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

sheet1
' Sheet1 の列をコピー
Worksheets("Sheet1").Columns(1).Copy
Worksheets("Sheet1").Columns(2).PasteSpecial
Worksheets(1).Columns(1).Copy
Worksheets(1).Columns(2).PasteSpecial

' Sheet2 の列をコピー
Worksheets("Sheet2").Columns(1).Copy
Worksheets("Sheet2").Columns(2).PasteSpecial
Worksheets(2).Columns(1).Copy
Worksheets(2).Columns(2).PasteSpecial

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

' どちらも同じコード
Dim r As Range
Set r = Columns(1)
Set r = Me.Columns(1)

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

' どちらも同じコード
Dim r As Range
Set r = Columns(1)
Set r = ActiveSheet.Columns(1)