大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで文字列をSplitを使って分割する方法についてご紹介します。Splitで分割すると返り値は配列に保存されるのがポイントです。改行、コンマ、半角スペース区切りで文字列を分割する具体的な例を挙げて解説します。

はじめに

この記事では、文字列を分割するVBA関数Splitについてご紹介します。

Splitを使えば、半角スペース、コンマや改行で区切られている文字列を分割することができます。

少し応用して、『(』や『県』などを区切り文字としてSplitを使って分割すると、県名を切り出したり、カッコ内の文字を切り出せます。

具体例を挙げながら解説していきます。

この記事で紹介すること

  • 文字列を分割する方法

目次

VBAでSplitを使って文字列を分割するイメージ

Excel VBAでSplitを使って文字列を分割するイメージを説明します。

Splitを使うときのポイントは、

  • Splitで分割した文字列は配列となる
  • 配列の大きさはUboundで取得できる

です。解説します。

Splitで分割すると配列に格納される

Splitで文字列を分割すると、分割した文字列は、配列として格納されます。

こんな感じです。

Splitの結果は、配列になる

Splitで文字列を分割して配列に格納した結果

半角スペース区切りの文字列を『Split』で分割すると、分割された文字列が配列へ格納されます。

配列の大きさは『Ubound』で取得

配列の大きさは『Ubound』で取得することができます。

配列の大きさは『Ubound』を使う

Uboundで配列の大きさを取得する

Splitで分割した文字列をセルへ入力する場合には、作成した配列の大きさが必要なります。

配列の大きさは『Ubound』で取得しましょう。

VBAでSplitを使って文字列を分割

Splitを使って文字列を分割する例を挙げていきます。

いくつか例を挙げますので必要な部分だけをみるといいです。

半角スペース区切りの文字列を分割

半角スペース区切りの文字列をSplitを使って分割してみます。

半角区切りの文字列『A B C D E』を分割するVBAコードです。

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を使って分割した結果

半角スペース区切りの文字列を分割できました。

コンマ区切りの文字列を分割

つづいて、コンマ区切りの文字列を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を使って分割した結果

コンマ区切りの文字列を分割できました。

区切りの文字を変えればいいだけです。

改行区切りの文字列を分割

改行区切りの文字列を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』としています。

では、実行してみます。

改行区切りを分割

改行区切りの文字列をSplitで分割した結果

改行区切りの文字列を分割できています。

改行区切り+コンマ区切りの文字列を分割する

少し応用になります。

改行区切りで、かつコンマ区切りの文字列を分割する方法です。

こちらを分割します。

改行区切り+コンマ区切りの文字列

改行区切りでコンマ区切りの文字列

一括でテキストデータを読み込んだ場合、改行区切り+コンマ区切りの文字列になります。

一括で読み込んだテキストデータを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)

改行区切りにすると、まずはこんな文字列になります。

Splitを使って改行区切りで文字列を分割した結果

手順②:改行区切りにした各文字列をコンマ区切りで分割

次に、改行区切りにした各文字列をコンマ区切りで分割します。

'配列の大きさ分だけループ
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

結果として、次のように文字列を分割できます。

改行区切り+コンマ区切りで分割した結果

改行区切り+コンマ区切りでSplitを使って分割した結果

改行区切り、かつコンマ区切りで文字列が分割できています。

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

手順は、

  • ①『.』を『,』に置換する
  • ②文字列を『,』で分割する

という流れです。

では結果をみてみます。

複数条件で分割

複数の区切り文字が使われている場合にReplaceとSplitを使って分割した結果

複数の区切り文字がある場合でも、文字列を分割することができます。

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を使って苗字と名前に分割した結果

『鈴木 一郎』を『鈴木』と『一郎』に分割できました。

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でカッコ内の文字列を分割して切り出し

カッコ内の文字列を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

結果をみてみます。

カッコ内の文字列を切り出し

カッコ内の文字列をSplitを使って分割して切り出した結果

『日本(JPN)』を『日本』と『JPN』に分割することができました。

Split、便利です。

おわりに

この記事では、文字列を分割するVBA関数Splitについてご紹介しました。

Splitを使えば、半角スペース、コンマや改行で区切られている文字列を分割することができます。

少し応用して、『(』や『県』などを区切り文字としてSplitで使って分割すると、県名を切り出したり、カッコ内の文字を切り出せます。

文字列を分割したい場合はSplitを使って、効率的にVBAコードを組んでいきましょう。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す