「vba split 格納している数」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
VBAには、何らかの区切り文字で要素ごとに区切られた文字列から、1次元配列を返すSplit関数があります。
このSplit関数を使って作られた、配列の要素の数を取得する方法を探している方による検索です。
Split関数で返される配列の要素数はUBound関数の戻り値+1
結論から書くと、Split関数で返される配列の要素数は、UBound関数で返される値に「+ 1」した値です。
UBound関数は、Split関数を使った場合に限らず、配列変数の添え字・インデックスの最大値を返す関数です。
Split関数とUbound関数のサンプルマクロ
ご自分の手を動かして確認してみることを、おすすめします。
Dim arr As Variant
Dim id_max As Long
arr = Split(ActiveCell.Value, ",")
id_max = UBound(arr)
Stop
End Subどこかのセルのように、下図のように「,」(カンマ)で区切ったデータを入力しておいてから、
上記のマクロを実行するとStop文の箇所でステップ実行モードになります。
ステップ実行モードになっている状態で、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示させると、Split関数を使った配列変数関連の動きが見えてくるはずです。
A1セルに「a,bb,ccc」というテストデータを入力しておいてから、上記のマクロを実行してローカルウィンドウを確認すると下図のような状態になっているはずです。
Split関数は第1引数に指定されている元の文字列を、第2引数に指定されている文字を区切り文字として作成した配列を返してきます。
上記の例のようにA1セルに「a,bb,ccc」と入力されている場合、「a」「bb」「ccc」が、配列変数・arrの各要素として格納されていることをローカルウィンドウで確認できます。
注目していただきたいのは、「a」の格納されている、1つ目の配列・arrの添え字が、「1」ではなく「0」であることです。
そして、変数・id_maxには、UBound関数の戻り値「2」が代入されていることも確認できます。
UBound関数は、配列変数の、添え字の最大値を返す関数だからです。
配列変数・arr()は「0」から始まっているので、UBound関数の戻り値に「+ 1」した値が、配列の要素の数になるというわけです。
Split関数はOption Base 1の影響を受けない
Excel VBAの場合、配列変数の添え字は、「0」から始まっているよりも「1」からになっているほうが扱いやすく、便利なことが多いです。
ですから「Option Base 1」を書いて、配列変数の添え字を「1」はじまりにするというのが、Excel VBAで配列を利用するときの有効な書き方でもあります。
ですが、Split関数で返される配列の場合、このOption Base 1の影響を受けません。
Split関数がOption Base 1の影響を受けないことを確認するサンプルマクロ
以下のサンプルマクロを動かして、Split関数で返される配列が、Option Base 1の影響を受けないことも確認してみてください。
Sub Split関数はOptionBaseの影響を受けない()
Dim arr_spt As Variant ''Split関数で返される配列
Dim max_spt As Long ''Split関数で返された配列の添え字の最大値
Dim arr_dim(2) As String ''比較用配列
Dim max_dim As Long ''比較用配列の添え字の最大値
arr_spt = Split(ActiveCell.Value, ",")
max_spt = UBound(arr_spt)
max_dim = UBound(arr_dim)
Stop
上記のマクロを実行して、ステップ実行モードに入った状態で、ローカルウィンドウを確認してみてください。
比較用の配列変数・arr_dimのほうは、Option Base 1の影響を受け、添え字が「1」からはじまっています。
これに対して、Split関数で返された配列変数・arr_sptのほうはOption Base 1の影響を受けることなく、添え字が「0」からはじまっています。
Split関数で返される配列変数の添え字は、必ず「0」からはじまるということです。
ですから、繰り返しになりますが、Split関数で返される配列の要素数は、UBound関数で返される、配列の添え字の最大値に「+ 1」した値といえるわけです。
最終更新日時:2018-11-13 10:03
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Splitで返される配列の要素数