Excel。VBA。表から特定の列(フィールド)だけを手早くコピーしたい
<Excel VBA>
データから必要な列(フィールド)だけを手早くコピーするとしたら、どうしたらいいのでしょうか?
例えば、次の表。
A列の「NO」とF列の「販売日」だけをコピーしたいとします。
自力でコピーしてもいいのですが、もっと多くの列だと、面倒です。
単純な作業ほど、繰り返し実行するとなると、効率的に作業できる方がいいですよね。
そこで、Excel VBAでマクロをつくると、とても簡単に、手早くコピーすることができます。
では、Excel VBAのプログラム文をつくってみました。
Sub 特定列コピー()
Dim hani As Range
Dim tokutei As Variant
Dim i As Long
Set hani = Range("a1").CurrentRegion
tokutei = Array(1, 6)
For i = 0 To UBound(tokutei)
hani.Columns(tokutei(i)).Copy Range("i1").Offset(0, i)
Next
Range("i1").CurrentRegion.Columns.AutoFit
End Sub
まずは実行してみましょう。
ご覧のように、I列とJ列に該当するデータをコピーすることができました。
プログラム文を確認していきます。
最初は、お馴染みの「宣言文」
Dim hani As Range
Dim tokutei As Variant
Dim i As Long
haniには、表の範囲を代入します。
tokureiには、配列としてコピーしたい特定の列番号を代入します。
Set hani = Range("a1").CurrentRegion
haniに、A1から連続するデータ(表)の範囲を代入します。
tokutei = Array(1, 6)
範囲の中から、抽出したい列番号をしていします。
今回は、1列目と6列目をコピーしたいので、Array(1, 6)と設定します。
For i = 0 To UBound(tokutei)
hani.Columns(tokutei(i)).Copy Range("i1").Offset(0, i)
Next
For To Next文でコピーを繰り返します。
iが0なのは、配列は「0」から始まるからです。
UBoundは、指定した配列で使用できる添え字の最大値を算出することができます。
つまり、UBoundをつかうことで、繰り返し回数を決めることができます。
hani.Columns(tokutei(i)).Copy Range("i1").Offset(0, i)
指定した列をコピーして貼り付けます。
Offsetをつかうことで、隣の列に貼り付けることができます。
最後の
Range("i1").CurrentRegion.Columns.AutoFit
この行は、貼り付けた列幅を自動調整させることで、「####」と表示されないようにしています。
少ないプログラム文ですが、簡単な作業でも、手早く処理することができますので、Excel VBAでプログラムをつくってみるのもいいかもしれませんね。