
マクロ 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
