マクロ講座2次元配列を1次元配列にする方法
2次元配列を1次元配列にする方法
マクロ 89回
シート上の表を配列として取得後、1次元にしたい
すでに2次元配列作成済みで、それを1次元配列にする方法を考えていきます。
2次元配列で配列を1次元配列に分けたり、取り出したりする方法。
(サンプルファイルは、こちらから
マクロ89回サンプルデータ)
2次元配列を1次元として取り出したい
1. マクロ講座87回でデータとして取得したい範囲を配列として取り込むコードは以下のようなコードでした。 配列として利用したい範囲にはbranchArr という変数名を使い、Variant型で宣言することにします。 また、シート名をshlistという名前に変更してあります。
Sub getrange_addsheet() Dim branchArr As Variant branchArr = shlist.Range("A1").CurrentRegion End Sub
2. 今回は、2次元配列の1部分を1次元として利用したいということです。つまりA列支店名の部分となります。元のコードに少し手を加えて範囲として取得した配列はtwo_arr, 1次元にした配列をone_arrとして区別します。
2次元配列は、この図のように取得されています。
Transpose関数、Index関数を使う
3.どのようにして2次元配列から1次元を取り出すかというと、 このままでは縦に支店名が入っているので、縦に長い配列です。 ワークシート関数のTranspose関数を使って、縦横変換すると、横に支店名が入ります。
Transpose関数を使って、縦横変換した2次元配列two_arrは、このようになりました。
4.つづいて、この2次元配列の1行目が支店名ですので、 one_arrは、two_arrという2次元配列の1行目ということです。
6. ローカルウィンドウで、取得できたことが確認できます。
7.さらに、取得した1次元配列をイミディエイトウィンドウに表示してみましょう。 Debug.Print
8. 簡単に一列で表示するには、JOIN関数を使います。
Sub getoneDimension_fromTwo() Dim two_arr As Variant, one_arr As Variant, r As Long two_arr = shlist.Range("A1").CurrentRegion two_arr = WorksheetFunction.Transpose(two_arr) one_arr = WorksheetFunction.Index(two_arr, 1) Debug.Print "one_arr = " & Join(one_arr, ",") End Sub
この記事は動画でも視聴できます。