即効テクニック |
「田中」「鈴木」「山田」という要素を持つ配列データを、セル範囲A1:C1に代入するには次のようにします。
Sub Sample1() Range("A1:C1") = Array("田中", "鈴木", "山田") End Subこのとき、代入するセル範囲の大きさと、配列の大きさを一致させるのがポイントです。 こうしたテクニックは、CSVファイルのデータを1行ずつ読み込み、指定したセルへ代入するとき便利です。 CSVファイルを1行ずつ読み込むには次のようにします。Sub Sample2() Dim buf As String Open "C:\Sample.csv" For Input As #1 Do Until EOF(1) Line Input #1, buf Debug.Print buf Loop Close #1 End Sub「Debug.Print buf」の代わりに、読み込んだ1行分のデータをカンマ(,)で分割し、それぞれのデータをセルに代入します。データの分割にはSplit関数が便利です。 Split関数は分割した各要素を配列で返します。 Sample1を応用すれば各セルに代入できますが、ここで問題になるのは配列の要素数とセル範囲の大きさ指定です。 配列の要素数はUbound関数で取得できます。 Ubound関数は、配列の最終要素のインデックスを返します。要素が3つある配列では先頭から0,1,2というインデックスが振られますので、2が返ります。 要素の個数は、この返り値に+1した数になります。Sub Sample3() Dim tmp tmp = Array("田中", "鈴木", "山田") MsgBox Ubound(tmp) End SubUbound関数を使えばSplit関数によって得られる配列の要素数が取得できます。 残る問題は、その配列の大きさに合わせたセル範囲を指定することです。 セル範囲の大きさを特定するにはResizeプロパティを使います。 Resizeプロパティはセル.Resize(RowSize, ColumnSize)と指定することで、任意の大きさを持つセル範囲を取得することができます。 CSVデータの場合、代入は1行ずつ行いますので、RowSizeは1です。 列サイズのColumnSizeは、配列の要素数を指定します。Sub Sample4() Dim buf As String, I As Long Open "C:\Sample.csv" For Input As #1 Do Until EOF(1) Line Input #1, buf I = I + 1 Cells(I, 1).Resize(1, Ubound(Split(buf, ",")) + 1) = Split(buf, ",") Loop Close #1 End Sub●補足● Split関数はExcel 2000で追加された関数です