VBAで文字列を分割するには、Split関数を使用します。
Split関数の使い方
Split関数は、「,」(カンマ)やスペース等で区切られた文字列を分割し、一次元配列を作成します。構文は下記です。
1 |
Split([文字列], [ 区切り文字], [返す要素数], [比較モード]) |
[文字列]:分割する文字列を指定します。
[ 区切り文字]:上で指定した文字列を区切る文字を指定します。省略可能で、省略した場合は半角スペースになります。
[返す要素数]:いくつの要素を返すかを指定します。省略可能で、省略した場合は「-1」(すべて返す)となります。
[比較モード]:文字列を比較するモードを指定します。省略可能で、省略した場合は、vbBinaryCompare(大文字/小文字を区別する)です。
戻り値は一次元配列になるので、別に格納用の配列を宣言しておく必要があります。
下記に使用例を示します。ここでの[区切り文字]は「,」(カンマ)です。
1 2 3 4 5 6 7 8 9 10 |
Sub SplitSample1() Dim myStr As String '引数1 Dim Pref() As String '結果を格納する配列 myStr = "香川,愛媛,徳島,高知" '引数1 (区切り文字は ,(カンマ)) Pref = Split(myStr, ",") 'Split関数を実行し配列Prefへ格納 End Sub |
配列Prefに値が格納されます。
ワークシートのセルに格納
下記は、上記を実行して得られた配列要素を、ワークシートのセルA1~A4へ書き写します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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)としてやります。
[実行結果]
分割位置を工夫する
Replace関数を併用すると、分割位置を意図的に設定できます。Replace関数は、指定した文字列の中で、任意の文字を置き換えることができます。
下記例をご覧ください。¥の前の「(」を「,」に変換したのち、Splitを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
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 |
[実行結果]
このように、綺麗にセルに収めることができました。