Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Split関数の戻り値が配列かどうか調べる

Split関数の戻り値が配列かどうか調べる

「vba split 配列かどうか」
「vba split できなかったとき 配列」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。

VBA(Visual Basic for Applications)のSplit関数は、文字列を分解して配列を返します。

Split関数の戻り値が配列かどうか調べる

このSplit関数の戻りが、本当に配列になっているかどうかを調べる方法を探していたのでしょう。

「vba splitできたか?」
「split できない場合 vba」
といった検索キーワードも、同じことを探していらしたのかもしれません。

[スポンサードリンク]

Split関数は必ず配列を返す

まず、以下のマクロを実行してみてください。

Trueと表示されたメッセージボックスが表示されるはずです。


Sub Split関数の戻り値をIsArrayで判定する()

 Const TXT = "a b c"

 Dim arr() As String

 arr = Split(TXT)
 MsgBox IsArray(arr)

End Sub

Split関数は第1引数だけが指定された場合、スペースを区切り文字として配列を返します。

上記のマクロの場合、定数・TXTには「a b c」と間にスペースを含んだ文字列が入っているので、
  arr = Split(TXT)
という行が実行されると、変数・arrは「a」「b」「c」を要素に持った配列になります。

配列かどうかを調べるIsArray関数は、引数に指定された変数が配列ならTrueを返してきますから、メッセージボックスにTrueが表示されたわけです。

ここまでは、予想どおりの動作です。
つづいて、定数・TXTの「a b c」からスペースを削除して「abc」にしてから、実行してみてください。
Falseが表示されると思った方もいらっしゃるでしょうけれど、今度もメッセージボックスにはTrueが表示されます。

「vba split 配列かどうか」
「vba split できなかったとき 配列」
という検索をなさった方は、このような状態をご覧になったのではないかと推測しています。

Split関数は必ず配列を返す関数で、「abc」をSplitした場合は、「abc」という文字列データの要素を一つだけ持った配列が返されてきます。

そのため定数・TXTが「abc」でも、Trueがメッセージボックスに表示されてしまいます。

変数・arrの宣言が、
  Dim arr() As String
と配列変数として宣言されているのだから、当たり前だと感じた方は、是非、
  Dim arr As Variant
でも実行してみてください。

LBound関数とUBound関数で要素数を確認する

要素が一つのときは、配列ではないと判定したいのであれば、LBound関数とUBound関数を利用して、配列のインデックス番号の最小値と最大値を比較してみてはいかがでしょう。


Sub Split関数の戻り値が本当に配列か()

 Const TXT = "a b c"

 Dim arr() As String

 arr = Split(TXT)
 MsgBox LBound(arr) <> UBound(arr)

End Sub

上記のマクロをこのまま実行した場合、変数・arrは「a」「b」「c」を要素に持った配列になり、LBound(arr)は「0」、UBound(arr)は「2」ですから、
 MsgBox LBound(arr) <> UBound(arr)
の行でTrueが表示されます。

定数・TXTを「abc」にして実行した場合、変数・arrは「abc」というデータの要素を一つだけ持った配列で、LBound(arr)も、UBound(arr)も「0」ですから、
 MsgBox LBound(arr) <> UBound(arr)
の行でFalseが表示されます。

ローカルウィンドウで配列変数・arrの中身を見ながら、ご確認ください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Split関数の戻り値が配列かどうか調べる

TrackBack:0

TrackBack URL

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Split関数の戻り値が配列かどうか調べる

「配列」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.