こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで列のコピーをする方法を知っていますか?
データの追加をする際に、列のコピーをするケースはよくありますよね。
そこで今回は、
・列をコピーする方法
・複数列を指定して列をコピーする方法
といった基礎的なことから、
・セル範囲を指定して列をコピーする方法
・別のブックから列をコピーする方法
・合わせて覚えると便利な列の挿入・削除方法
といった応用的な方法まで、徹底的に解説します!
列をコピーするためのCopyメソッドの使い方とは
はじめに、列をコピーする方法について簡単に解説します。
VBAで列をコピーする場合は、Copyメソッドを使って以下のように書きます。
使い方:
Columns(コピー元の列番号).Copy Destination:=Columns(コピー先の列番号)
また、コピーするとExcel上で次のようにコピーした状態が残ってしまいます。
D列をコピーした後、点線でコピー状態が残っているサンプルです。
そのため、コピー状態を解除するコードを合わせて覚えておくのがおすすめです!
コピー解除コード:
Application.CutCopyMode = False
サンプルコード
次に、サンプルコードをもとに、具体的な使い方を解説します。
列を指定して1列コピー
はじめに、1列コピーする方法について解説します。
実行前:
サンプルコード1:
Sub Test1() Columns(2).Copy Destination:=Columns(9) End Sub
実行後:
2列目のデータをコピーして9列目にペーストするサンプルです。
このように、簡単に列をコピーすることができます。
セル範囲を指定してコピー
次に、セル範囲を指定して列をコピーする方法について解説します。
実行前:
サンプルコード:
Sub Test2() Range("A2:A11").Copy Destination:=Range("I2:I11") End Sub
実行後:
サンプルでは、「A2:A11」の範囲のデータをコピーし、「I2:I11」の範囲に貼り付けています。
セル範囲を変更すれば、指定範囲でコピー・ペーストすることができます。
列全体ではなく範囲を指定してコピーする場合は、この方法を使えばOKですね。
複数列コピー
次に、複数列を一括でコピーする方法について解説します。
実行前:
サンプルコード:
Sub Test3() Range("B:D").Copy Destination:=Columns(9) End Sub
実行後:
サンプルでは、B列~D列目のデータをコピーし、I列からデータを貼り付けています。
「Range("2:4")」の列番号の範囲を変更すればコピーする範囲を変更でき、「Columns(9)」の列番号を変更すれば貼り付け先の位置を変更することができます。
複数列をコピーする場合は、この方法を使えばOKですね。
変数を使ったコピー
次に、変数を使った列のコピー方法について解説します。
実行前:
サンプルコード:
Sub Test4() Dim copyCol As Integer Dim pasteCol As Integer copyCol = 2 pasteCol = 9 Columns(copyRow).Copy Destination:=Columns(pasteRow) End Sub
実列結果:
変数を使うと、列数を変えるときに変数の値を変えるだけで済むため、使い勝手がよくなるのでおすすめです!
選択している列のすぐ右にコピー
次に、選択している列のすぐ右に列をコピーする方法について解説します。
実行前:
サンプルコード:
Sub Test5() Columns(ActiveCell.Column).Copy Destination:=Columns(ActiveCell.Column + 1) End Sub
実行後:
選択している列は「ActiveCell.Column」で取得することができるので、「ActiveCell.Column + 1」で選択している列の下の列にコピーしています。
別ブックからコピー
次に、別のブックから列をコピーする方法について解説します。
別のブックからコピーする場合は、事前に別のブックを開いてからワークブックを指定してコピーします。
コピー元のデータ(Test.xlsx):
コピー前:
サンプルコード:
Sub Test6() Dim wb1 As Workbook 'ブックを開く Workbooks.Open ThisWorkbook.Path & "Test.xlsx" Set wb1 = ActiveWorkbook 'Test.xlsxのB列をマクロ実行ファイルにコピー wb1.Worksheets("Sheet1").Columns(2).Copy Destination:=ThisWorkbook.Worksheets("Sheet1").Columns(9) 'ブックを閉じる Application.DisplayAlerts = False wb1.Close Application.DisplayAlerts = True End Sub
コピー後:
「Workbooks.Open ファイルパス」でファイルを開き、コピー元のブックはActiveWorkBook、マクロ実行ファイルはThisWorkBookで指定して列をコピーしています。
ワークブックの操作については以下でも詳しく解説しているので、気になる方は見てみてくださいね!
行をコピーする方法とは
ここまで列をコピーする方法を解説してきましたが、同じような方法で行も簡単にコピーすることができます。
実行前:
サンプルコード:
Sub Tes7() Rows(11).Copy Destination:=Rows(12) End Sub
実行後:
行番号を指定する場合はColumnsの部分をRowsに変更するだけですむため、とても簡単ですよね。
このように、行も簡単にコピーすることができます。
行のコピーについては以下でも詳しく解説しているので、気になる方は見てみてくださいね!
形式を選択して貼り付けるためのPasteSpecialメソッドの使い方とは
ここまでそのままコピーする方法のみ紹介してきましたが、形式を選択して貼り付けたい場合もありますよね。
形式を選択して貼り付ける場合は、PasteSpecialメソッドを使います。
実行前:
サンプルコード:
Sub Test8() Columns(1).Copy Columns(9).PasteSpecial Paste:=xlPasteFormats 'コピーモードを解除 Application.CutCopyMode = False End Sub
実行後:
PasteSpecialメソッドの詳しい使い方については以下で解説しているので、気になる方は見てみてくださいね!
補足:合わせて覚えると便利な列挿入・削除方法
最後に、列のコピーとあわせて覚えておくと便利な列の挿入・削除方法について解説します。
列を挿入する場合は、Insertメソッドを使って次のように書きます。
実行前:
列挿入サンプルコード:
Sub Test9() Columns(2).Insert End Sub
実行後:
列を削除する場合は、Deleteメソッドを使って次のように書きます。
実行前:
列削除サンプルコード:
Sub Test10() Columns(2).Delete End Sub
実行後:
挿入、削除どちらも簡単にできるので合わせて覚えておくのがおすすめです!
以下で詳しく解説しているので、さらに知りたい方は見てみてくださいね!
まとめ
今回は、VBAで列を挿入する方法について徹底的に解説しました。
Excelで列の操作をするケースは多いので、列のコピー、挿入、削除は合わせて覚えておくのがおすすめです!
どれも使い方は簡単なので、ぜひ使ってみてくださいね!