- VBAで文字列を分割する方法が知りたい
- 「1234-56-789」という番号から「1234」や「56」を抽出したい
- Split関数の使い方が知りたい
このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。
- VBAで文字列を分割する方法が学べる
- Split関数の使い方がわかる
- Split関数を扱う際の注意点を知れる
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
Split関数とは?
「Split」は、文字列を分割することができる関数です。
例えば、セル内に「1234-56-789」という文字列が入っていたとします。
この文字列の「-(ハイフン)」を基準に「1234」「56」「789」という具合に分割することができます。
基準とする文字(区切り文字)は「-」だけでなく、任意で指定できます。
▼よく使う区切り文字
- 「_」アンダーバー:「1234_56」 → 「1234」と「56」に分割
- 「 」半角スペース:「田中 一郎」 → 「田中」と「一郎」に分割
- 「/」スラッシュ:「utatane/test.xlsx」 → 「utatane」と「test.xlsx」に分割
- 「,」カンマ:「abcd,efg」 → 「abcd」と「efg」に分割
- 「.」ドット:「Ichiro.Tanaka」 → 「Ichiro」と「Tanaka」に分割
では、Split関数の使い方を見ていきましょう。
Split関数の使い方
まずはシンプルな使い方をお見せします。
シンプルな使い方
Sub シンプルsplit() ' プロシージャを作成
Dim arr As Variant ' 配列を宣言
arr = Split("1234-56-789", "-") ' 区切り文字を「-」で指定
Debug.Print arr(0) ' 1234
Debug.Print arr(1) ' 56
Debug.Print arr(2) ' 789
End Sub
上記コードにて、文字列を分割することができます。

まずは2行目で配列を宣言します。
Dim arr As Variant ' 配列を宣言
(「Variant」は数字や文字列など、どんな値でも入れることができる型です)
配列については下記記事をご参考ください。
3行目は、Split関数で文字列を分割し、配列に代入しています。
arr = Split("1234-56-789", "-") ' 区切り文字を「-」で指定
()内に、「対象となる文字列」と「区切り文字」を指定します。
今回は、「-」を区切り文字にしました。
半角スペースを区切り文字にする場合は、指定を省略することができます。
arr = Split("1234 56 789") ' 区切り文字を半角スペース「 」で指定(省略)
Debug.Print arr(0) ' 1234
Debug.Print arr(1) ' 56
Debug.Print arr(2) ' 789
4~6行目で、配列の各要素に入った値を「Debug.Print」で表示させています。
「Debug.Print」の表示方法は下記記事をご参考ください。
変数を経由して文字列を分割することもできます。
Sub シンプルsplit() ' プロシージャを作成
Dim model AS Variant ' 変数を宣言
Dim arr As Variant ' 配列を宣言
model = "1234-56-789" ' 変数に文字列を代入
arr = Split(model, "-") ' 区切り文字を「-」で指定
Debug.Print arr(0) ' 1234
Debug.Print arr(1) ' 56
Debug.Print arr(2) ' 789
End Sub
結果は先ほどと同じです。
高度な使い方
次に、少し高度な使い方を見ていきましょう。
limit(最大分割数)の指定
まずはlimit(最大分割数)を指定する方法です。
あまりピンと来ないかもしれませんので、まずは下記VBAコードを見てください。
Sub 高度なsplit() ' プロシージャを作成
Dim arr As Variant ' 配列を宣言
arr = Split("1234-56-789", "-", 2) ' limitを「2」に指定
Debug.Print arr(0) ' 1234
Debug.Print arr(1) ' 56-789
End Sub
3行目に注目です。
【 配列 = Split(文字列, 区切り文字, limit) 】
limit(最大分割数)を「2」にしてみました。
その他は前項と同じです。
実行結果を見てみましょう。

2つめの区切り文字では分割されず、「56-789」という文字列が出力されました。
これが「limit」の効果で、分割数を制限することができます。
例えば、「ハイフンまでの1234を取り出したい」ときなどに便利です。
用意する配列も最大2つでいいので、ハイフンがいくつあるのかわからない場合でも安心です。
(「実践的な使い方」でコードを掲載)
limitのデフォルトは「-1」で無制限です。
前項のように指定しなければ「-1」が指定され、制限なく分割できます。
compareを指定して区切り文字の大文字・小文字を区別
次に、区切り文字の大文字・小文字を区別する方法です。
全くピンと来ないと思いますので、まずは区切り文字を「Z」にした場合のサンプルコードをお見せします。
まだ「compare」は指定していません。
Sub 高度なsplit() ' プロシージャを作成
Dim arr As Variant ' 配列を宣言
arr = Split("abcdZefzghi", "Z") ' 区切り文字を「Z」で指定
Debug.Print arr(0) ' abcd
Debug.Print arr(1) ' efzgh
Debug.Print arr(2) ' 値なし(エラー)
End Sub
区切り文字に指定したのは大文字の「Z」です。
しかしながら、8文字目の「z」を間違えて小文字にしてしまったため、うまく区切ることができませんでした。
今度は「compare」を指定して再度実行してみます。
Sub 高度なsplit() ' プロシージャを作成
Dim arr As Variant ' 配列を宣言
arr = Split("abcdZefzghi", "Z", -1, vbTextCompare) ' 区切り文字を「Z」で指定し、大文字小文字を区別しないように指定
Debug.Print arr(0) ' abcd
Debug.Print arr(1) ' ef
Debug.Print arr(2) ' ghi
End Sub
【 配列 = Split(文字列, 区切り文字, limit, compare) 】
「comprare」を指定する場合は、「limit」も省略せずに指定する必要があります。

うまく区切ることができました。
【compare】
- vbBinaryCompare:区切り文字の大文字・小文字を区別する(デフォルト/省略した場合)
- vbTextCompare:区切り文字の大文字・小文字を区別しない
実践ではほとんど使うことがないので、参考程度で大丈夫です。
では、より実践的な使い方を見ていきましょう。
実践的な使い方
下記のVBAコードは、A1セルに書き込みされた文字列を分割して、B1~D1セルに書き込みした例です。
Sub 実践的split() ' プロシージャを作成
Dim model AS Variant ' 変数を宣言
Dim arr As Variant ' 配列を宣言
model = Range("A1").Value ' 変数にセルの値を代入
arr = Split(model, "-") ' 区切り文字を「-」で指定
Range("B1").Value = arr(0) ' 1つめの「-」までの文字をB1セルに書き込み
Range("C1").Value = arr(1) ' 2つめの「-」までの文字をC1セルに書き込み
Range("D1").Value = arr(2) ' 終わりまでの文字をD1セルに書き込み
End Sub

A列の文字列を一括処理することもできます。
Sub 実践的split() ' プロシージャを作成
Dim model AS Variant ' 文字列を格納する変数を宣言
Dim arr As Variant ' 配列を宣言
Dim i As Integer ' カウント用の変数を宣言
For i = 1 to 5
model = Cells(i,1).Value ' A列のセルの値を変数に代入
arr = Split(model, "-", 2) ' 区切り文字を「-」/limitを「2」で指定
Cells(i,2).Value = arr(0)
Cells(i,3).Value = arr(1)
Next i
End Sub

1つめの「-」までの文字を取り出したい場合に便利です。
繰り返しにはFor文を使用しています。
For文の詳しい解説は、下記記事をご参考ください。
では次に、Split関数の注意点を見ていきましょう。
Split関数の注意点
区切り文字が無い場合
指定した区切り文字が文字列の中に無い場合は、文字列を分割することができません。
Sub 注意点1()
Dim arr As Variant
arr = Split("1234-56-789", ",")
Debug.Print arr(0) ' 「,」が無いため分割されない
End Sub

文字列が分割されずにそのまま出力されました。
空の要素が含まれる場合
区切り文字が連続している場合は、配列の要素に空の値が代入されます。
Sub 注意点2()
Dim arr As Variant
arr = Split("1234--789", "-")
Debug.Print arr(0) ' 1234
Debug.Print arr(1) ' (空)
Debug.Print arr(2) ' 789
End Sub

その後の処理によってはエラーとなるため、注意しましょう。
最後に
VBAのSplit関数について解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!