HOME > 即効テクニック > Excel VBA > 関数関連のテクニック > 文字列を分割し1次元配列として返す(Split関数)

文字列を分割し1次元配列として返す(Split関数)|Excel VBA

関数関連のテクニック

文字列を分割し1次元配列として返す(Split関数)

(Excel 2000/2002/2003/2007/2010)

文字列を区切り文字で分割し、各要素を文字列型の1次元配列に格納して返します。
長さ0の文字列("")を指定した場合は、空の配列を返します。

引数Delimiterには区切り文字を指定します。
省略時は半角スペース(" ")が区切り文字となります。
長さ0の文字列("")を指定した場合は、引数Expressionで指定した文字列式全体を1つの要素とする配列を返します。

また、文字列の中から取り出す要素数が決まっている場合は、引数Limitにその要素数を指定します。すべての要素を取得するには、この引数の指定を省略するか、-1を指定します。

引数Compareには文字列を比較する方法を示す定数を指定します。
使用できる定数は表のとおりです。
省略するとOption Compareステートメントの設定を使用して比較します。
Option Compareステートメントの記述もない場合は、バイナリモードで比較します。

構文 Split(Expression, Delimiter, Limit, Compare)
設定項目内容
Expression文字と区切り文字を含んだ文字列式を指定 [省略不可]
Delimiter区切り文字を指定。省略時は半角スペース(" ") [省略可能]
Limit返す配列の要素数を指定 [省略可能]
Compare文字列式を比較するときの比較モードを指定 [省略可能]

引数Compareで指定する比較モードを表す定数一覧(VbCompareMethod列挙体のメンバ)

定数説明
VbBinaryCompare0バイナリ モードの比較
VbTextCompare1テキスト モードの比較
VbDatabaseCompare2Microsoft 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ステートメントの影響を受けません。

●補足●

Split関数はExcel 2000 より追加された関数です。
Excel 97以前のVBAで同等の処理を実現するには、InStr関数で区切り文字の位置を検索し、Mid関数で区切り文字にはさまれた文字列を取得する処理を、区切り文字の数だけ繰り返します。

また、引数Compareで指定できる値について、ヘルプにはOption Compare ステートメントの設定を使用して比較する「VbUseCompareOption(-1)」の記載がありますが、実際は指定できません。Option Compareステートメントの記述に従うには引数Compareを省略してください。