Excel VBAの「Split 関数」について解説します。
Split 関数とは
Excel VBA の Split 関数は、指定した区切り文字で文字列を分割し、分割された文字列を配列にして返します。「分割された文字列」が一次元配列の要素となります。
Split 関数は、カンマ区切りなどの文字列を配列に分割したいときに使用する関数です。その逆で、配列をカンマ区切りなどで一つの文字列にしたいときには Join 関数を使用します。
Split 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
Split 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Split(expression[, delimiter[, limit[, compare]]])
引数
引数 | 説明 |
---|---|
expression | 【必須】文字列と区切り文字を含んだ文字列式を指定します |
delimiter | 【省略可能】分割に使用する区切り文字を指定します ※ 省略時は、空白文字 (” “) が指定されたとみなします |
limit | 【省略可能】返す配列の要素数を指定します ※ 省略または -1 を指定すると、すべての要素を返します |
compare | 【省略可能】区切り文字の比較モードを指定します ※ 省略時はバイナリモードで比較します |
※ バイナリ比較モードでは、全角半角、大文字小文字が区別されます。
※ テキスト比較モードでは、全角半角、大文字小文字が区別されません。
[compare] 比較モード
定数 | 値 | 説明 |
---|---|---|
vbBinaryCompare | 0 | バイナリモードで比較します【省略時の既定モード】 大/小文字、全/半角、ひらがな/カタカナを区別します |
vbTextCompare | 1 | テキストモードで比較します 大/小文字、全/半角、ひらがな/カタカナを区別しません |
※ vbUseCompareOption(-1)と vbDatabaseCompare(2)という設定もありますが、まず使用することは無いと思いますので説明を省略しています。
戻り値
戻り値 | 説明 |
---|---|
一次元配列 (String) | 分割された部分文字列を要素とした配列が返ります ※ 配列の最小インデックスは 0 スタートです |
※ 戻り値を受け取る変数は String 型の動的配列か Variant 型を指定します。
※ Variant 型の動的配列では「エラー 13 型が一致しません。」が発生します。
解説(使用例)
Split 関数の使い方をサンプルで確認していきましょう。
Split 関数サンプル (基本的な使用例)
分割文字と比較モードの設定による動作の違いをサンプルで確認していきましょう。
バイナリモード比較(デフォオルト)の分割例
比較モードを指定しない場合は、デフォルトでバイナリモード比較となります。
'■Split関数使用例1(バイナリモード比較の分割例)
Sub Split_Sample01()
Dim str As String
Dim arrDOW() As String 'day of week
Dim i As Long
str = "Mon,Tue, Wed, Thu, Fri, Sat, Sun"
' 全角カンマで文字列を分割(バイナリモード比較)
arrDOW = Split(str, ",")
' 分割された配列要素を出力
For i = LBound(arrDOW) To UBound(arrDOW)
Debug.Print arrDOW(i)
Next i
End Sub
これを実行したイミディエイトがこちらです。
・最初の文字列だけ分割されています。なぜでしょう?
・分割前の文字列を再確認したところ、全部が全角カンマ “,” に見えましたが、
2番目からは “,” + ” ” 半角カンマ+半角スペースだったようです。
・よく確認すべきでした。
テキストモード比較で分割する例
先ほどのコードを全/半角を区別しないテキストモード比較で分割するとどうなるでしょうか。
'■Split関数使用例2(テキストモード比較の分割例)
Sub Split_Sample02()
Dim str As String
Dim arrDOW() As String 'day of week
Dim i As Long
str = "Mon,Tue, Wed, Thu, Fri, Sat, Sun"
' 全角カンマで文字列を分割(テキストモード比較)
arrDOW = Split(str, ",", -1, vbTextCompare)
' 分割された配列要素を出力
For i = LBound(arrDOW) To UBound(arrDOW)
Debug.Print arrDOW(i)
Next i
End Sub
テキストモードに変更して実行したイミディエイトがこちらです。
・うまく分割できたように見えますが、3番目以降の要素の先頭にスペースが残っています。
・区切り文字を “, ” 半角カンマ+半角スペースにした場合では、最初の文字列が分割されません。
・このような場合は、分割文字と比較モードの設定だけではうまくいきませんね。
スペースを取り除いてから分割する例
ということで、次のようにコードに手を加えて半角スペースを取り除いてから分割してみました。
'■Split関数使用例3(スペースを取り除いてから分割する例)
Sub Split_Sample03()
Dim str As String
Dim arrDOW() As String 'day of week
Dim i As Long
str = "Mon,Tue, Wed, Thu, Fri, Sat, Sun"
' 文字列のスペースを取り除く
str = Replace(str, " ", "")
' 全角カンマで文字列を分割(テキストモード比較)
arrDOW = Split(str, ",", -1, vbTextCompare)
' 分割された配列要素を出力
For i = LBound(arrDOW) To UBound(arrDOW)
Debug.Print arrDOW(i)
Next i
End Sub
実行結果は次のとおりです。うまく分割できました(^^♪
・手を加えたのは、str = Replace(str, " ", "")
の部分です。
・Reprace 関数を使って分割前の文字列からスペース ” “を “” 0文字に置き換えて削除しています。
・arrDOW = Split(str, ",", -1, vbTextCompare)
の -1 の部分は空欄でも同じことです。ここに数値 3 を設定すれば Mon Tue Wed の3要素の配列が作成されます。
参考記事
次の記事にもサンプルがあります。是非ご覧ください。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
Excel VBA の Split 関数は、文字列を指定した区切り文字で分割し、分割された部分を配列として返す便利な関数です。適切に使用することで、文字列の操作やデータ処理を効率化できます。
「区切り文字」や「比較モード」オプションの使い方をしっかり理解しておきましょう。
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;