更新日:、 作成日:
VBA 列をコピーして貼り付ける
はじめに
Excel VBA マクロの列をコピーして貼り付ける方法を紹介します。
Columns(2).Copy または Range("B1").EntireColumn.Copy メソッドから、列「B」をコピーできます。
Columns(3).PasteSpecial または Range("C1").PasteSpecial メソッドから、列「C」に貼り付けできます。形式を選択して貼り付けと同じように、値や書式だけを貼り付けられます。
 
列をコピーして貼り付ける
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      ' コピーモードを解除 
Range の引数にセル名を指定すると、そのセルを取得できます。EntireColumn からその列を取得できます。
セル「B1」の列をコピーするには Range("B1").EntireColumn.Copy を入力します。
Range("B1").EntireColumn.Copy
Range("C1").EntireColumn.PasteSpecial (xlPasteAll)
Application.CutCopyMode = FalsePasteSpecial の引数に、貼り付ける形式を指定できます。
| 定数名 | 値 | 説明 | 
| 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 | すべての結合されている条件付き書式 | 
Columns(1).Copy 
Columns(2).PasteSpecial                   ' すべて
Columns(3).PasteSpecial (xlPasteFormulas) ' 数式を貼り付け
Columns(4).PasteSpecial (xlPasteValues)   ' 値を貼り付け
Columns(5).PasteSpecial (xlPasteFormats)  ' 書式を貼り付け
Application.CutCopyMode = FalseApplication.CutCopyMode に False を設定しているのは、Copy メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。
 
クリップボードにコピーしない
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 
列の範囲「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 の列をコピー
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).PasteSpecialSheet1 に 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)スポンサーリンク