文字列を分割し1次元配列として返す(Split関数)|Excel VBA |
Split関数は文字列を区切り文字で分割し、各要素を文字列型の1次元配列に格納して返します。
構文 Split(Expression, Delimiter, Limit, Compare)
設定項目 | 内容 |
---|---|
Expression | 文字と区切り文字を含んだ文字列式を指定 [省略不可] |
Delimiter | 区切り文字を指定。省略時は半角スペース(" ") [省略可能] |
Limit | 返す配列の要素数を指定 [省略可能] |
Compare | 文字列式を比較するときの比較モードを指定 [省略可能] |
引数Expressionに長さ0の文字列("")を指定した場合は、空の配列、つまり要素とデータのない配列を返します。
引数Delimiterには区切り文字を指定します。
省略時は半角スペース(" ")が区切り文字となります。
長さ0の文字列("")を指定した場合は、引数Expressionで指定した文字列式全体を1つの要素とする配列を返します。
また、文字列の中から取り出す要素数が決まっている場合は、引数Limitにその要素数を指定します。すべての要素を取得するには、この引数の指定を省略します。
引数Compareには文字列を比較する方法を示す定数を指定します。
使用できる定数は表のとおりです。
省略するとOption Compareステートメントの設定を使用して比較します。
Option Compareステートメントの記述もない場合は、バイナリモードで比較します。
引数Compareで指定する比較モードを表す定数一覧(VbCompareMethod列挙体のメンバ)
定数 | 値 | 説明 |
---|---|---|
VbBinaryCompare | 0 | バイナリ モードの比較 |
VbTextCompare | 1 | テキスト モードの比較 |
VbDatabaseCompare | 2 | Microsoft Access の場合のみ有効。データベースに格納されている設定に基づいて比較 |
次のサンプルを見てください。
複数のセル範囲のアドレスを取得すると、それぞれのアドレスがカンマ(,)で区切られることを利用して、個々のアドレスを配列に格納しています。
Sub SplitSamp1()
Dim myAddress As String
Dim myArray() As String
Dim i As Long
Dim myMsg As String
'---複数のセル範囲のアドレスを取得
myAddress = Application.InputBox( _
Prompt:="複数範囲を選択してください" & vbCr & _
"( [Ctrl]キー + 範囲選択 )" _
, Type:=8).Address
Range(myAddress).Select
'---個々のアドレスを「,」で区切って配列に代入
myArray = Split(myAddress, ",") '---(1)
'---UBound関数で配列のインデックスの最大値を取得
For i = 0 To UBound(myArray)
myMsg = myMsg & i & "番目の要素 : " & myArray(i) & vbCr
Next i
MsgBox myMsg
End Sub
InputBoxメソッドを使用し、ユーザーに複数のセル範囲を選択させています。
実行結果のように、複数のセル範囲のアドレスはカンマで区切られた文字列として取得されます。
(1)では、Split関数の引数Expressionにその文字列を指定し、カンマ(,)を区切り文字として個々のセル範囲のアドレスを分割して、配列に格納しています。
Split関数はインデックス番号が0から始まる配列を返します。
Option Baseステートメントの影響を受けません。
ユーザーが入力した文字列をスペースで区切る場合は、スペースを半角/全角のどちらで入力されても区切れるように、引数CompareにはvbTextCompareを指定すると良いでしょう。