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

VBA 列をコピーする

はじめに

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

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

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

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

列をコピーする

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

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

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


Columns(2).Copy   ' B 列をコピー
Columns("B").Copy 
Columns(3).PasteSpecial (xlPasteAll)   ' C 列に貼り付け
Columns("C").PasteSpecial (xlPasteAll) 
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))     ' C 列に貼り付け
Call Columns("B").Copy(Columns("C")) ' C 列に貼り付け

列の範囲をコピーする

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


Range("B:C").Copy                  
Range(Columns(2), Columns(3)).Copy ' B ~ C 列をコピー
Range("D:D").PasteSpecial 
' B 列 → D 列に貼り付け
' C 列 → E 列に貼り付け
2

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

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


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)
  • 目次
    • 列をコピーする
    • 列の範囲をコピーする
    • 指定したシートの列をコピーする