Sub TEST1()
With ActiveSheet
'半角スペース区切りで分割
a = Split(.Cells(1, 1), " ")
'配列の大きさの分だけループ
For i = 0 To UBound(a)
.Cells(1, 3 + i) = a(i) 'セルへ入力
Next
End With
End Sub
変数は、『a = Split(文字列, 区切り文字)』のように入力します。
結果をみてみます。
半角スペース区切りを分割
半角スペース区切りの文字列を分割できました。
コンマ区切りの文字列を分割
つづいて、コンマ区切りの文字列をSplitを使って分割してみます。
コンマ区切りの文字列は、CSVデータなどで使われます。
CSVデータをVBAを使ってエクセルへ取り込みたい場合に使えます。
文字列『1,2,3,4,5』をSplitを使って分割するVBAコードです。
Sub TEST2()
With ActiveSheet
'コンマ区切りで分割
a = Split(.Cells(1, 1), ",")
'配列の大きさの分だけループ
For i = 0 To UBound(a)
.Cells(1, 3 + i) = a(i) 'セルへ入力
Next
End With
End Sub
コンマ区切りの文字列を分割なので、『a = Split(文字列, ",")』としています。
では結果です。
コンマ区切りを分割
コンマ区切りの文字列を分割できました。
区切りの文字を変えればいいだけです。
改行区切りの文字列を分割
改行区切りの文字列をSplitで分割する方法です。
改行区切りの文字列としては、一括で読み込んだテキストデータの文字列がそれにあたります。
一括で読み込んだテキストデータをVBAを使ってエクセルへ取り込みたい場合に使えます。
改行区切りの『ABCDE』をSplitで分割するVBAコードです。
Sub TEST3()
With ActiveSheet
'改行区切りで分割
a = Split(.Cells(1, 1), vbLf)
'配列の大きさの分だけループ
For i = 0 To UBound(a)
.Cells(3 + i, 1) = a(i) 'セルへ入力
Next
End With
End Sub
エクセルの改行コードは『vbLf』ですので、区切り文字を『vbLf』としています。
では、実行してみます。
改行区切りを分割
改行区切りの文字列を分割できています。
改行区切り+コンマ区切りの文字列を分割する
少し応用になります。
改行区切りで、かつコンマ区切りの文字列を分割する方法です。
こちらを分割します。
改行区切り+コンマ区切りの文字列
一括でテキストデータを読み込んだ場合、改行区切り+コンマ区切りの文字列になります。
一括で読み込んだテキストデータをVBAを使ってエクセルへ取り込みたい場合に使えます。
コンマ区切りで改行区切りの文字列をSplitを使って分割するVBAコードです。
Sub TEST4()
'改行区切りで分割
a = Split(ActiveSheet.Cells(1, 1), vbLf)
For i = 0 To UBound(a)
'コンマ区切りで分割
b = Split(a(i), ",")
For j = 0 To UBound(b)
ActiveSheet.Cells(3 + i, 1 + j) = b(j) 'セルへ入力
Next
Next
End Sub
コードが少し長いです。文字列を2回分割するのがポイントです。
手順は、
①改行区切りで分割
②改行区切りにした各文字列をコンマ区切りで分割
③改行区切り、コンマ区切りにした文字列をセルに入力
手順①:改行区切りで分割
最初に、改行区切りで文字列を分割します。
'改行区切りで分割
a = Split(ActiveSheet.Cells(1, 1), vbLf)
改行区切りにすると、まずはこんな文字列になります。
手順②:改行区切りにした各文字列をコンマ区切りで分割
次に、改行区切りにした各文字列をコンマ区切りで分割します。
'配列の大きさ分だけループ
For i = 0 To UBound(a)
'コンマ区切りで分割
b = Split(a(i), ",")
Next
手順③:改行区切り、コンマ区切りにした文字列をセルに入力
セルへ入力します。
'配列の大きさ分だけループ
For j = 0 To UBound(b)
ActiveSheet.Cells(3 + i, 1 + j) = b(j) 'セルへ入力
Next
結果として、次のように文字列を分割できます。
改行区切り+コンマ区切りで分割した結果
改行区切り、かつコンマ区切りで文字列が分割できています。
VBAでSplitを使って複数条件で文字列を分割
複数条件の区切り文字をSplitを使って分割する方法です。
結論から言うとSplitだけではできません。
少し発想を変えて、区切り文字が複数ある場合は、区切り文字を1つに統一してやればいいです。
『,』『.』が混在している場合
文字列の区切り文字に『,』と『.』が使われてしまっている場合に、文字列を分割してみます。
文字列を置換するVBA関数Replaceを使って『.』を『,』に置換したあとに文字列を分割します。
文字列『A,B.C,D.E』をSplitとReplaceを使って分割するVBAコードです。
Sub TEST5()
With ActiveSheet
a = Replace(.Cells(1, 1), ".", ",") 'ピリオドをコンマに置換
b = Split(a, ",") 'コンマ区切りで分割
For i = 0 To UBound(b) '配列の大きさ分だけループ
.Cells(1, 3 + i) = b(i) 'セルへ入力
Next
End With
End Sub
手順は、
①『.』を『,』に置換する
②文字列を『,』で分割する
という流れです。
では結果をみてみます。
複数条件で分割
複数の区切り文字がある場合でも、文字列を分割することができます。
VBAでSplitを使った例
最後にちょっと実践形式で、Splitで文字列を分割する例です。
やっていることは、今まで説明した内容と同じなので、必要なければスキップしてください。
Splitで苗字と名前を分割
苗字と名前をSplitを使って分割する例です。
『鈴木 一郎』を苗字と名前に分割してみます。
Sub TEST6()
With ActiveSheet
'半角スペースで分割
a = Split(.Cells(1, 1), " ")
.Cells(1, 3) = a(0) '苗字
.Cells(1, 4) = a(1) '名前
End With
End Sub
半角スペースで区切られているので、Splitで指定する区切り文字は『" "』となります。
では結果です。
苗字と名前を分割
『鈴木 一郎』を『鈴木』と『一郎』に分割できました。
Splitで住所を県で分割する
住所を県で分割する例です。
『青森県弘前市大字下白銀町』を県名とそれ以外で分割してみます。
Sub TEST7()
With ActiveSheet
'『県』で分割
a = Split(.Cells(1, 1), "県")
.Cells(1, 3) = a(0) & "県" '県名
.Cells(1, 4) = a(1) '県名以外
End With
End Sub
分割する区切り文字は『"県"』になります。
では、結果をみてみます。
住所を分割
『青森県弘前市大字下白銀町』を『青森県』と『弘前市大字下白銀町』に分割できました。
Splitでカッコ内の文字列を分割して切り出し
カッコ内の文字列をSplitを使って分割して切り出すこともできます。
『日本(JPN)』にあるカッコ内の文字列をSplitを使って分割して切り出すVBAコードです。
Sub TEST8()
With ActiveSheet
'『(』で分割
a = Split(.Cells(1, 1), "(")
.Cells(1, 3) = a(0) 'カッコより左側の文字列
.Cells(1, 4) = Left(a(1), Len(a(1)) - 1) 'カッコ内の文字列
End With
End Sub