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

VBA 列をコピーする

はじめに

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

Columns.Copy メソッドか Range.Copy メソッドで列をコピーできます。

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

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

列をコピーする

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

列「B」をコピーするには Columns(2).Copy または Columns("B").Copy のように指定します。

列「C」に貼り付けるには Columns(3).PasteSpecial または Columns("C").PasteSpecial のように指定します。


Columns(2).Copy   ' 列「B」をコピー
Columns("B").Copy ' 列「B」をコピー
Columns(3).PasteSpecial   ' 列「C」に貼り付け
Columns("C").PasteSpecial ' 列「C」に貼り付け
1

Range.EntireColumn を使用すると、指定したセルの列を取得できます。

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


Range("B1").EntireColumn.Copy
Range("C1").EntireColumn.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 を設定するとコピーモードを解除できます。


Columns(2).Copy
Columns(3).PasteSpecial
Application.CutCopyMode = False

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」へ貼り付け

列の範囲をコピーする

列の範囲「B ~ C」をコピーするには Range("B:C").Copy のように指定します。


Range("B:C").Copy         ' 列「B ~ C」をコピー
Range("D:D").PasteSpecial ' 列「D」へ貼り付け

Call Range("B:C").Copy(Range("D:D")) ' 列「B ~ C」を列「D」へ貼り付け
2

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

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


' どちらも同じコード
Columns(1).Copy
ActiveSheet.Columns(1).Copy

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

sheet1

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


' Sheet1 の列「A」をコピー
Sheets("Sheet1").Columns(1).Copy
Sheets("Sheet1").Columns(2).PasteSpecial
Sheets(1).Columns(1).Copy
Sheets(1).Columns(2).PasteSpecial

' Sheet2 の列「A」をコピー
Sheets("Sheet2").Columns(1).Copy
Sheets("Sheet2").Columns(2).PasteSpecial
Sheets(2).Columns(1).Copy
Sheets(2).Columns(2).PasteSpecial
  • 目次
    • 列をコピーする
    • 列の範囲をコピーする
    • 指定したシートの列をコピーする