Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Splitで返される配列の要素数

Splitで返される配列の要素数

対象:Excel2007, Excel2010, Excel2013

「vba split 格納している数」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

VBAには、何らかの区切り文字で要素ごとに区切られた文字列から、1次元配列を返すSplit関数があります。

VBAのSplit関数で返される配列の要素数

このSplit関数を使って作られた、配列の要素の数を取得する方法を探している方による検索です。

[スポンサードリンク]

Split関数で返される配列の要素数はUBound関数の戻り値+1

結論から書くと、Split関数で返される配列の要素数は、UBound関数で返される値に「+ 1」した値です。

UBound関数は、Split関数を使った場合に限らず、配列変数の添え字・インデックスの最大値を返す関数です。

Split関数とUbound関数のサンプルマクロ

ご自分の手を動かして確認してみることを、おすすめします。


Sub Split関数とUBound関数()

 Dim arr As Variant
 Dim id_max As Long

 arr = Split(ActiveCell.Value, ",")
 id_max = UBound(arr)

 Stop

End Sub

どこかのセルのように、下図のように「,」(カンマ)で区切ったデータを入力しておいてから、

VBAのSplit関数で返される配列の要素数

上記のマクロを実行するとStop文の箇所でステップ実行モードになります。

ステップ実行モードになっている状態で、メニュー[表示]-[ローカルウィンドウ]からローカルウィンドウを表示させると、Split関数を使った配列変数関連の動きが見えてくるはずです。

A1セルに「a,bb,ccc」というテストデータを入力しておいてから、上記のマクロを実行してローカルウィンドウを確認すると下図のような状態になっているはずです。

VBAのSplit関数で返される配列の要素数

Split関数は第1引数に指定されている元の文字列を、第2引数に指定されている文字を区切り文字として作成した配列を返してきます。

上記の例のようにA1セルに「a,bb,ccc」と入力されている場合、「a」「bb」「ccc」が、配列変数・arrの各要素として格納されていることをローカルウィンドウで確認できます。

VBAのSplit関数で返される配列の要素数

注目していただきたいのは、「a」の格納されている、1つ目の配列・arrの添え字が、「1」ではなく「0」であることです。

VBAのSplit関数で返される配列の要素数

そして、変数・id_maxには、UBound関数の戻り値「2」が代入されていることも確認できます。

VBAのSplit関数で返される配列の要素数

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の影響を受けないことも確認してみてください。


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

End Sub

上記のマクロを実行して、ステップ実行モードに入った状態で、ローカルウィンドウを確認してみてください。

VBAのSplit関数で返される配列の要素数

比較用の配列変数・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で返される配列の要素数

TrackBack:5

TrackBack URL
VBAで配列のインデックス・添字の最小値を1にずらす from インストラクターのネタ帳
Excel VBAで配列にする変数をVariantで宣言しておくと、ReDim Preserve文を使って、インデックス・添字の最小値を1始まりにずらすこ...
配列の要素数を取得する from インストラクターのネタ帳
VBA(Visual Basic for Applications)で配列の要素数を取得するには『UBound(配列) - LBound(配列) + 1』...
配列をFor Each~Nextループで処理する from インストラクターのネタ帳
配列をオブジェクト変数を使ったFor Each~Nextループで処理するマクロと、比較のためにカウンター変数を使ったFor~Nextループで処理するマクロ...
テキストファイルを読み込んでワークシートへデータを書き出すExcelマクロ from インストラクターのネタ帳
テキストファイルのデータを読み込んで、ワークシートに書き出すExcel(エクセル)マクロに書き出すマクロをご紹介しています。
MkDirで階層の深いフォルダーを作成する from インストラクターのネタ帳
MkDirを使って階層の深いフォルダーを作成するマクロをご紹介しています。

Home » エクセルマクロ・Excel VBAの使い方 » 配列 » Splitで返される配列の要素数

「配列」の記事一覧

検索


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

.