例えば0~9まで、部屋数にして10個の配列があったとします。
中身はひとまず1~10としましょう。
ではまず部屋数が確定しているものとして吐き出してみましょう。
縦に吐き出してみる
Sub 配列の吐出し() Dim arr(9) As Integer Dim i As Integer For i = 1 To 10 arr(i - 1) = i Next Range(Cells(1, 1), Cells(11, 1)).Value = arr End Sub
まずは配列を作ってそれを配列の部屋分だけ縦にRangeで指定して配列を丸ごと値として吐き出しています。結果はどうなるでしょうか?
選択した全てのセルに配列の一番最初の部屋である1の値が入りましたね。
横に吐き出してみる
Sub 配列の吐出し() Dim arr(9) As Integer Dim i As Integer For i = 1 To 10 arr(i - 1) = i Next Range(Cells(1, 1), Cells(1, 10)).Value = arr End Sub
今度は横方向に一括で吐き出しています。
基本的な構造は変えていないのに今度は1~10までちゃんと入りましたね。
ここからわかると思うのですが、1次元の配列は横方向に展開されているという事ですね。
では、1次元の配列を縦方向に吐き出したい場合はループ処理するしかないのでしょうか?
そこで登場するのがTransposeです。TransposeといえばExcelの数式で行と列を入れ替える数式ですね。それが配列にも使えるんです。
早速やってみましょう。
Sub 配列の吐出し() Dim arr(9) As Integer Dim i As Integer For i = 1 To 10 arr(i - 1) = i Next Range(Cells(1, 1), Cells(10, 1)).Value = WorksheetFunction.Transpose(arr) End Sub
TransposeはExcelの数式なのでWorksheetFunctionを使わなければ使用できません。
しかし、このひと手間を加えるだけで横方向に伸びていたはずの配列を縦方向に変換出来てしまいます。
という事で配列の縦方向への変換方法を学んだ所で次はResize(リサイズ)を学んでいきましょう。