マクロ講座表からどの列でも自在に配列にする

表からどの列でも自在に配列にする
表からどの列でも自在に配列にする

マクロ 89_c回

今回は、シートの表からの配列の取得方法として、表全体ではなく、特定の列だけを取得するケースを考えます。

「特定の列、例えばA列だけを配列に取り込みたいが、表に空白がある」などと言う場合に、空白があっても、列を配列にとりこんでみましょう。

表から、特定の列を最初から一次元配列として取得する

1. 変数としてone_arrをVariant型で宣言します。 シートには、shlistという名前がついています。
そして、Range(”A1”)のカレントリージョンを取得します。

Sub getrange_onearr()
    Dim one_arr As Variant
End Sub

表からどの列でも自在に配列にする1

2. カレントリージョンでは、2列選択しているので、そこから1列にします。RangeオブジェクトのResizeプロパティを使います。
Range.Resize(RowSize, ColumnSize)

one_arr = Selection.Resize(, 1)

表からどの列でも自在に配列にする2

3. 行のリサイズは行わないので省略しています。列を1列だけ指定。これによりA列だけ取得できました。


表からどの列でも自在に配列にする3

4.Debugで確認しましょう。前回とおなじコードを使います。変数rをLongで宣言、For文で回します。

Sub getrange_onearr()
    Dim one_arr As Variant
        shlist.Range("A1").CurrentRegion.Select
        one_arr = Selection.Resize(, 1)
    Dim r As Long
        For r = LBound(one_arr, 1) To UBound(one_arr, 1)
            Debug.Print one_arr(r, 1)
        Next r
End Sub

5. コードを実行すると、イミディエイトウィンドウに取得した配列が表示されます。


表からどの列でも自在に配列にする5

まとめ

6. 表から特定の列を配列として取得するには、
1.レンジオブジェクト.CurrentRegionで全体を指定しSelectする
2.リサイズして行数を1にする。
3.これは、表が2列だから、1で1列目が取得できたわけです。
2列目を取得する場合は、Resizeした後に、Offsetで移動します。あるいはOffsetで移動したあと、Resizeします。

Sub getrange_onearr_offset()
    Dim one_arr As Variant
        shlist.Range("A1").CurrentRegion.Select
        one_arr = Selection.Offset(0, 1).Resize(, 1)
    Dim r As Long
        For r = LBound(one_arr, 1) To UBound(one_arr, 1)
            Debug.Print one_arr(r, 1)
        Next r
End Sub

表からどの列でも自在に配列にする6