【Excel VBA】split関数で文字列を区切る2(UBound関数で配列の最大インデックスを調べる)

スポンサーリンク
Excel VBA講座 開講中!

今回は前回の記事の続きです。

【Excel VBA】Split関数で文字列を区切る1
今回はExcel VBAで文字列を区切る方法(区切り位置)についてご紹介します。 今回の例を読み進めるにあたり、配列についてある程度理解している必要がありますのでご注意ください。

前回のサンプル1では事前に配列の数が分かっていましたが、このままでは文字列を区切った後の配列数が事前に分からない場合に対処する事ができません。
そこで今回は、文字列を区切った後の配列数が事前に分からない場合の処理方法についてご紹介します。
(というか、配列の数は事前に分からない場合がほとんどかもしれません)

スポンサーリンク
スポンサーリンク

文字列を区切った後の配列数が事前に分からない場合

それでは、下記のサンプル2を元にご紹介します。

・サンプル2

Sub 文字列区切り2()

Dim str As String
Dim ary As Variant
Dim i As Long

str = “1,2,3,4,5”
ary = Split(str, “,”)

MsgBox UBound(ary)
MsgBox LBound(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関数 取得結果

UBound関数 取得結果

ちなみにUBound関数による数値の取得は配列の数ではなく、最大インデックス、つまり最大の部屋番号のようなものになりますので注意が必要です。

メッセージボックスにより、今回の配列変数aryの最大インデックスは4、つまり[0]~[4]までの格納場所が存在している事が分かりましたので、これを元に処理を進めていきます。

ちなみに少々話がそれますが、次の行の

MsgBox LBound(ary)

ではLBound関数により配列変数aryの配列の最小インデックスを取得してメッセージボックスに表示させています。

LBound関数 取得結果

LBound関数 取得結果

これにより、配列変数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)に格納されている値を順番に記入していく処理となります。

Split関数 実行結果

Split関数 実行結果

これで文字列を区切った後、いくつの文字列に分かれて配列に格納されたかが分からなくても、その都度ごとに最大インデックスを調べて臨機応変に処理する事ができます。

タイトルとURLをコピーしました