今回は前回の記事の続きです。
前回のサンプル1では事前に配列の数が分かっていましたが、このままでは文字列を区切った後の配列数が事前に分からない場合に対処する事ができません。
そこで今回は、文字列を区切った後の配列数が事前に分からない場合の処理方法についてご紹介します。
(というか、配列の数は事前に分からない場合がほとんどかもしれません)
文字列を区切った後の配列数が事前に分からない場合
それでは、下記のサンプル2を元にご紹介します。
・サンプル2
Sub 文字列区切り2() Dim str As String str = “1,2,3,4,5” MsgBox UBound(ary) For i = 0 To UBound(ary) Cells(i + 1, 1).Value = ary(i) Next i End Sub |
上記のサンプル2についてですが、
ary = Split(str, “,”)
までは前回のサンプル1と同様になります。
次の、
MsgBox UBound(ary)
UBound関数により、配列変数aryの配列の最大インデックスを取得し、メッセージボックスに表示させています。
これは本来必要ない処理ではありますが、UBound関数で取得数値を確認するために、今回は表示させています。
ちなみにUBound関数による数値の取得は配列の数ではなく、最大インデックス、つまり最大の部屋番号のようなものになりますので注意が必要です。
メッセージボックスにより、今回の配列変数aryの最大インデックスは4、つまり[0]~[4]までの格納場所が存在している事が分かりましたので、これを元に処理を進めていきます。
ちなみに少々話がそれますが、次の行の
MsgBox LBound(ary)
ではLBound関数により配列変数aryの配列の最小インデックスを取得してメッセージボックスに表示させています。
これにより、配列変数aryの最小インデックスは0であることがわかります。
これも本来必要ない処理ではありますが、最大インデックスを取得するUBound関数と合わせてご紹介するために今回は表示させています。
次の
For i = 0 To UBound(ary)
のForステートメントですが、変数iが0からUBound(ary)、つまり0~4の間は処理を繰り返すようにします。
Cells(i + 1, 1).Value = ary(i)
では、アクティブシートのA列のi+1目、つまりセルA1~A5に、配列変数aryの(0)~(4)に格納されている値を順番に記入していく処理となります。
これで文字列を区切った後、いくつの文字列に分かれて配列に格納されたかが分からなくても、その都度ごとに最大インデックスを調べて臨機応変に処理する事ができます。