文字列を分割し1次元配列として返す(Split関数)
 文字列を区切り文字で分割し、各要素を文字列型の1次元配列に格納して返し
ます。引数Delimiterでは区切り文字を指定します。省略時は半角スペース(" ")
が区切り文字となります。長さ0の文字列("")を指定した場合には、引数Expression
で指定した文字列式全体を1つの要素として持つ配列を作成します。また、返す
要素数が決まっている場合には、引数Limitでその要素数を指定します。全ての
要素を取得したい場合には、この引数の指定を省略するか、-1を指定します。
引数Compareでは文字列を比較する方法を示す定数を指定します。使用できる定数
は下の一覧のとおりです。省略時にはOption Compareステートメントの設定を使用
して比較されます。


・引数Compareで指定する比較モードを表す定数一覧(VbCompareMethod)
定数                値    説明
VbUseCompareOption  -1    Option Compareステートメントの設定を使用して比較
VbBinaryCompare      0    バイナリ モードの比較
VbTextCompare        1    テキスト モードの比較
VbDatabaseCompare    2    Microsoft Access の場合のみ有効。データベースに
                          格納されている設定に基づいて比較

  構文 Split(Expression, Delimiter, Limit, Compare)

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


 次のサンプルを見てください。複数のセル範囲がアドレスとして取得された際に
は、それぞれのセル範囲がカンマ(,)で区切られることを利用して、それぞれの
セル範囲を表すアドレスを配列に格納しています。


●サンプル●

Sub SplitSamp1()

    Dim myAddress As String
    Dim myArray() As String
    Dim i As Integer
    Dim myMsg As String

    '---複数のセル範囲のアドレスを取得
    myAddress = Application.InputBox( _
        Prompt:="複数範囲を選択してください" & vbCr & "( [Ctrl]キー + 範囲選択 )" _
        , Type:=8).Address
    Range(myAddress).Select
    '---(1)個々の選択範囲のアドレスを配列変数に代入
    myArray = Split(myAddress, ",")
    '---UBound関数で配列のインデックスの最大値を取得
    For i = 0 To UBound(myArray)
        myMsg = myMsg & i & "番目の要素 : " & myArray(i) & vbCr
    Next i
    MsgBox myMsg

End Sub


●解説●
 InputBoxステートメントを使用し、ユーザーに複数のセル範囲を選択させています。
実行結果のように、複数のセル範囲のアドレスはカンマで区切られた文字列として取
得されます。
 (1)では、Split関数の対象にその文字列を指定し、カンマ(,)を区切り文字として、
個々のセル範囲のアドレスを分割して、配列に格納しています。

●ポイント●
 Split関数はExcel2000 VBAの新機能です。Excel97までのVBAで同等の機能を実現し
ようとすれば、InStr関数で区切り文字の位置を検索して、Mid関数で区切り文字には
さまれた文字列を取得する、というような処理を区切り文字の数だけ繰り返す、複雑
なコードを記述する必要がありましたが、Split関数を使えば1行のステートメントで
済みます。活用できる場面はきっとあると思いますので、覚えておいてください。

Excel2000



戻る


Excel Word Access VBA! モーグ