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


マクロ 89_c回
今回は、シートの表からの配列の取得方法として、表全体ではなく、特定の列だけを取得するケースを考えます。
「特定の列、例えばA列だけを配列に取り込みたいが、表に空白がある」などと言う場合に、空白があっても、列を配列にとりこんでみましょう。
表から、特定の列を最初から一次元配列として取得する
1. 変数としてone_arrをVariant型で宣言します。 シートには、shlistという名前がついています。
そして、Range(”A1”)のカレントリージョンを取得します。
Sub getrange_onearr() Dim one_arr As Variant End Sub

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

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

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. コードを実行すると、イミディエイトウィンドウに取得した配列が表示されます。

スポンサーリンク
スポンサーリンク
まとめ
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
