更新日:、 作成日:
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 = 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 | すべての結合されている条件付き書式 |
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 メソッドを実行すると、そのセルがコピーモードになるためです。これを解除しています。
クリップボードにコピーしない
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).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)
スポンサーリンク