Excel VBA 必要な項目列のデータのみ別シートに抽出する

必要なデータ項目列のみ別シートに抽出する方法

データの中で必要な項目列だけのデータに整えたい場合があると思います。

そのようなときは、不要な項目列を削除する方法もありますが、元データはそのままで、必要な項目列をコピーして別シートに貼付けてデータを新たに作成した方が問題が発生しないと思います。

ここでは、配列に必要な列番号を格納して、繰り返し処理で順に配列から列番号を取り出し
その列番号で列を参照してコピーし、新規作成したシートに順に貼り付けるコードをご紹介します。

実行結果(1列目と3列目を抽出)


必要なデータ項目列のみ別シートに抽出するコードと解説

Sub 列抽出()
Dim データ範囲 As Range
Dim 抽出列 As Variant
Dim i As Long
Set データ範囲 = ActiveSheet.Range("A1").CurrentRegion
 抽出列 = Array(1, 3)
 Sheets.Add.Name = "抽出"
For i = 0 To UBound(抽出列)
 データ範囲.Columns(抽出列(i)).Copy Sheets("抽出").Range("A1").Offset(0, i)
Next i
End Sub
2列目【Dim データ範囲 As Range】
A1セルから始まる元データのデータ範囲を格納する変数「データ範囲」をオブジェクト型(Range)で宣言します。


3行目【Dim 抽出列 As Variant】
抽出する列の番号の配列を格納する変数「抽出列」を配列を格納するのでバリアント型(variant)で宣言します。


4行目【Dim i As Long】
繰り返し処理で使用する配列番号と繰り返し数を格納する変数「i」を長整数型(Long)で宣言します。


5行目【Set データ範囲 = ActiveSheet.Range(“A1”).CurrentRegion】
A1セルから始まるデータの固まりをRange【レンジ】オブジェクトのCurrentRegion【カレントリージョン】プロパティで参照して変数「データ範囲」に代入します。オブジェクト型変数なのでSet【セット】キーワードで指定します。


6行目【抽出列 = Array(1, 3)】
Array【アレイ】関数を使用して、抽出する列の列番号を配列変数「抽出列」に代入します。
コード例では1列目と3列目を指定していますが、実際使用するときは、環境に合わせて変更してください。抽出する列番号をカンマで区切って指定してください。


7行目【Sheets.Add.Name = “抽出”】
Sheets【シーツ】コレクションのAdd【アド】メソッドを使用してワークシートを追加してName【ネーム】プロパティで「抽出」とシート名を付けます。


8行目For i = 0 To UBound(抽出列)】
For Next【フォーネクスト】ステートメントで繰り返し処理の始まりです。配列内の要素数の最大値を返すUBound【ユーボンド】関数を使用してカウンタ―変数の「i」に0~要素数を順に代入します。0から始まる理由は配列番号が0から始まるからです。


9行目データ範囲.Columns(抽出列(i)).Copy Sheets(“抽出”).Range(“A1”).Offset(0, i)】
元データ範囲をColumns【カラムス】プロパティで参照して引数の配列変数「抽出列」から列番号を順に取り出し、その列をコピーし、抽出シートのA1セルに貼り付けます。2回目からは、Offset【オフセット】プロパティ使用してとなりの行に貼り付けるようにしています。

以上で、必要な項目列のデータのみ別シートに抽出する方法についての解説を終了します。
ありがとうございました。

スポンサーリンク