この記事ではSplit関数の使い方と注意点について解説します。
他のよく使うVBA関数一覧はこちら。
Split関数の使い方と注意点
Split関数は、文字列を指定した区切り文字で分割して、配列として返す関数です。
CSVや区切り文字付きデータを処理したいときによく使います。
構文
Split(文字列, 区切り文字 [, 最大分割数] [, 比較方法])
- 文字列 : 分割対象の文字列
- 区切り文字(省略可) : 要素を分けるための文字(省略するとスペース" ")
- 最大分割数(省略可) : 分割される最大数
- 比較方法(省略可) : 比較方法(大文字小文字を区別するか等)を表す定数
- 戻り値 : 分割された要素を格納した配列(Variant型)
比較方法には以下の定数を使用します。
| 定数 | 値 | 説明 |
|---|---|---|
| vbUseCompareOption | -1 | Option Compare ステートメントの設定を使用して比較を実行します。 |
| vbBinaryCompare | 0 | バイナリ比較(大文字小文字を区別する)を実行します。 |
| vbTextCompare | 1 | テキスト比較(大文字小文字を区別しない)を実行します。 |
使用例
カンマで文字列を分割する
Sub Sample()
Dim result As Variant
result = Split("Abc,Def,Ghi", ",")
Debug.Print result(0)
Debug.Print result(1)
Debug.Print result(2)
End Sub
▶ 出力結果
Abc
Def
Ghi
区切り文字を省略した場合
区切り文字を省略した場合、スペースで分割されます。
Sub Sample()
Dim result As Variant
result = Split("Abc Def Ghi,Jkl")
' 「Abc」と「Def」の間に半角スペース1つ
' 「Def」と「Ghi,Jkl」の間に半角スペース2つ
Debug.Print result(0)
Debug.Print result(1)
Debug.Print result(2)
Debug.Print result(3)
End Sub
▶ 出力結果
Abc
Def
' 「Def」「Ghi,Jkl」間の1つ目と2つめのスペース間の文字列「」
Ghi,Jkl ' カンマでは分割されない
最大分割数を指定する
最大分割数を指定した場合、上限を超える部分は最後の要素にまとめられます。
Sub Sample()
Dim result As Variant
result = Split("a,b,c,d", ",", 2)
Debug.Print result(0) ' a
Debug.Print result(1) ' b,c,d
End Sub
▶ 出力結果
a
b,c,d ' 上限を超える部分は最後の要素にまとめられる
大文字小文字を区別しない比較方法を指定する
比較方法を省略した場合やバイナリ比較(vbBinaryCompare)を指定した場合、大文字と小文字が区別されます。
Sub Sample()
Dim result As Variant
result = Split("A-B-b-C", "b")
Debug.Print result(0)
Debug.Print result(1)
End Sub
▶ 出力結果
A-B- ' Bでは分割されない
-C
テキスト比較(vbTextCompare)を指定することで大文字小文字に区別なく分割することができます。
Sub Sample()
Dim result As Variant
result = Split("A-B-b-C", "b", , vbTextCompare)
Debug.Print result(0)
Debug.Print result(1)
Debug.Print result(2)
End Sub
▶ 出力結果
A-
- ' Bでも分割
-C ' bで分割
⚠️注意
第1引数は文字列である必要がある
数値など文字列でない値を渡すと、**実行時エラー 13「型が一致しません」**が発生します。
Sub Sample()
Dim val As Long
val = 12345
Debug.Print Split(val, "2")
End Sub
引数にNullを渡すとエラーになる
Sub Sample()
Dim s As Variant
s = Null
Debug.Print Split(s, ",")
End Sub
戻り値は配列(Variant型)
戻り値は1次元の配列として扱えます。
要素をループで取り出すのが基本です。
Sub Sample()
Dim arr As Variant
Dim i As Long
arr = Split("Red,Green,Blue", ",")
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next
End Sub
▶ 出力結果
Red
Green
Blue
区切り文字省略時に全角スペースでは分割されない
区切り文字省略時にスペースで分割されると述べましたが、
分割は半角スペースのみで、全角スペースでは分割されません。
Sub Sample()
Dim result As Variant
result = Split("Abc Def Ghi,Jkl", , vbTextCompare)
' 「Abc」と「Def」の間に全角スペース1つ
' 「Def」と「Ghi,Jkl」の間に全角スペース2つ
Debug.Print result(0)
End Sub
▶ 出力結果
Abc Def Ghi,Jkl
関連するVBA関数
- Join関数
- Array関数
- LBound関数・UBound関数
その他のVBA関数
【Excel VBA】VBAでよく使う関数一覧&基本の使い方

