9/23/2021

Excel。VBA。表から特定の列(フィールド)だけを手早くコピーしたい【COPY】

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でプログラムをつくってみるのもいいかもしれませんね。