Split関数とは
Split関数は、指定した区切り文字をもとに文字列を分割し、結果を配列として取得できるVBAの標準関数です。CSV形式の文字列やスペース区切りのデータを扱うときに非常によく使われます。
対になる関数としてJoin関数(配列を1つの文字列に結合する関数)がありますが、Split関数はその逆の処理、つまり「1つの文字列を配列に分解する」処理を担当します。この記事では、Split関数の基本的な使い方から、実務でよく使うパターンまで解説します。
基本構文
Split(文字列, [区切り文字], [Limit], [Compare])
| 引数 | 説明 |
|---|---|
| 文字列 | 分割したい文字列(必須) |
| 区切り文字 | 分割に使う文字(省略時は半角スペース) |
| Limit | 分割する要素数の上限(省略時は無制限) |
| Compare | 区切り文字の比較方法(大文字小文字を区別するかどうか) |
戻り値は0から始まるインデックスの配列(String型)になります。
基本的な使い方
まずはもっともシンプルな例です。区切り文字を省略すると、半角スペースで分割されます。
Sub SplitSample1()
Dim arr As Variant
arr = Split("Excel VBA Macro")
Debug.Print arr(0) '→ Excel
Debug.Print arr(1) '→ VBA
Debug.Print arr(2) '→ Macro
End Sub
Split関数の戻り値は配列なので、受け取る変数はVariant型(または明示的な配列宣言)にしておく必要があります。
区切り文字を指定する
カンマ区切り(CSV形式)の分割
実務でもっともよく使うのが、CSV形式の文字列をカンマで分割するパターンです。
Sub SplitCsvSample()
Dim arr As Variant
arr = Split("田中,佐藤,鈴木", ",")
Dim i As Long
For i = 0 To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
UBound(arr)で配列の最大インデックスを取得し、For文でループすれば、要素数が変わっても柔軟に処理できます。
タブ区切りの分割
タブ区切りのテキストを分割したい場合は、vbTabを区切り文字に指定します。
Sub SplitTabSample()
Dim arr As Variant
arr = Split("商品A" & vbTab & "1000" & vbTab & "10個", vbTab)
Debug.Print arr(0) '→ 商品A
Debug.Print arr(1) '→ 1000
Debug.Print arr(2) '→ 10個
End Sub
Limit引数で分割数を制限する
第3引数のLimitを指定すると、分割する要素数の上限を決められます。上限に達すると、残りの文字列はそのまま最後の要素にまとめて格納されます。
Sub SplitLimitSample()
Dim arr As Variant
arr = Split("2026-08-03-手順書", "-", 2)
Debug.Print arr(0) '→ 2026
Debug.Print arr(1) '→ 08-03-手順書
End Sub
「先頭の1項目だけ取り出したいが、残りは区切らずそのまま使いたい」といった場面で便利です。
Compare引数で大文字・小文字を区別する
区切り文字がアルファベットの場合、Compare引数で大文字・小文字を区別するかどうかを指定できます。
Sub SplitCompareSample()
Dim arr As Variant
' バイナリ比較(大文字・小文字を区別する)
arr = Split("AxBxC", "x", -1, vbBinaryCompare)
Debug.Print UBound(arr) + 1 '→ 3
' テキスト比較(大文字・小文字を区別しない)
arr = Split("AXBxC", "x", -1, vbTextCompare)
Debug.Print UBound(arr) + 1 '→ 3
End Sub
Limit引数を省略できないため、Compare引数だけを指定したい場合はLimitに-1(無制限)を指定します。
実務でよく使うパターン
セルに入力されたCSV文字列を配列に変換して集計する
Sub SplitAndSum()
Dim target As String
Dim arr As Variant
Dim i As Long
Dim total As Long
target = Range("A1").Value '例: "100,200,300,400"
arr = Split(target, ",")
total = 0
For i = 0 To UBound(arr)
total = total + CLng(arr(i))
Next i
Debug.Print "合計: " & total
End Sub
セルに入力された文字列を数値の配列に変換し、そのまま集計処理につなげる典型的なパターンです。
複数の区切り文字が混在する場合の対処
Split関数は一度に1種類の区切り文字しか指定できません。カンマとスペースが混在するような文字列は、あらかじめReplace関数で区切り文字を統一してからSplitするとスムーズです。
Sub SplitMixedDelimiter()
Dim target As String
Dim arr As Variant
target = "Excel, VBA スプレッドシート,自動化"
target = Replace(target, " ", ",") '半角スペースをカンマに統一
target = Replace(target, ",,", ",") '連続するカンマを1つに整理
arr = Split(target, ",")
Dim i As Long
For i = 0 To UBound(arr)
If arr(i) <> "" Then Debug.Print arr(i)
Next i
End Sub
Split関数を使う際の注意点
- 戻り値は必ず0始まりの配列になります。1件も分割されなかった場合でも、要素数1の配列(分割前の文字列そのもの)が返ります。
- 区切り文字が連続している場合(例:
"A,,B")、間に空文字列の要素が作られます。集計処理などで空文字列を無視したい場合は、If arr(i) <> ""のようなチェックを入れてください。 - 受け取る変数は必ず
Variant型にしてください。String型で受けようとするとエラーになります。
まとめ
Split関数は、区切り文字を基準に文字列を配列へ分解できる、実務での利用頻度が非常に高い関数です。CSV文字列の読み込みや、セル入力値の分解処理など、さまざまな場面で活躍します。逆に配列を1つの文字列にまとめたいときはJoin関数を使うと、Split関数とセットでより効率的にデータを扱えるようになります。


コメント