Excel VBAで文字列を分割する:Split

VBAで文字列を分割するには、Split関数を使用します。

Split関数の使い方

Split関数は、「,」(カンマ)やスペース等で区切られた文字列を分割し、一次元配列を作成します。構文は下記です。

Sub SplitSample1()

    Dim myStr As String  '引数1
    Dim Pref() As String '結果を格納する配列

    myStr = "香川,愛媛,徳島,高知" '引数1 (区切り文字は ,(カンマ))

    Pref = Split(myStr, ",") 'Split関数を実行し配列Prefへ格納

End Sub

配列Prefに値が格納されます。

split

ワークシートのセルに格納

下記は、上記を実行して得られた配列要素を、ワークシートのセルA1~A4へ書き写します。

Sub SplitSample2()

    Dim myStr As String '引数1となる文字列
    Dim Pref() As String  '結果を格納する配列
    Dim i As Long   'セル書き込み時のカウンタ変数

    myStr = "香川,愛媛,徳島,高知"
 
    Pref = Split(myStr, ",") 'Split関数実行

'セルに書き写します
    For i = 0 To UBound(Pref) 'カウンタ変数iは0から3まで
        Cells(i + 1, 1).Value = Pref(i)  'Cellsの行インデックスに注意
    Next i
 
End Sub

(補足)Ubound関数は、指定した配列の最大インデックス番号を返します。この場合ですと3です。また、セルのインデックス番号は1からですので、Cells(i,1)とするとPref(0)を代入する際にCells(0,1)となり、エラーが発生してしまいますので、Cells(i+1,1)としてやります。

[実行結果]result

分割位置を工夫する

Replace関数を併用すると、分割位置を意図的に設定できます。Replace関数は、指定した文字列の中で、任意の文字を置き換えることができます。

下記例をご覧ください。¥の前の「(」を「,」に変換したのち、Splitを実行します。

Sub SplitSapmle3()

    Dim myStr As String
    Dim List() As String
    Dim i As Long, n As Long 'nはセルの行インデックス番号

    myStr = "海鮮丼(¥900),牛丼(¥500),かつ丼(¥600)"

    myStr = Replace(myStr, "(", ",") '「(」をカンマに変換
    List = Split(myStr, ",") 'Split関数実行

    n = 1
    For i = 0 To UBound(List) Step 2
        Cells(n, 1).Value = List(i)                         '品名
        Cells(n, 2).Value = Replace(List(i + 1), ")", "")   '値段 ")"を取る
        n = n + 1                                           'セルの行インデックスを+1
    Next i
End Sub

[実行結果]list

このように、綺麗にセルに収めることができました。


イベント

2017/12/05(火)
Design Thinking Square