CSVファイルなどの「,」で区切られてるものや、メールアドレスの「@」マーク、氏名の姓・名の間にある「スペース」など、特定の文字で分割したいことはたくさんあります。
データが少ない場合は手入力でいけますが、データの量が多いと大変だし、間違えることもしょっちゅう。
Excel VBAで文字列を分割するには「Split」関数を使います。
下図は、サンプルデータです。
< スポンサーリンク >
「Split」関数構文
指定された文字列を分割し、一次元配列に返します。
Split(expression, [delimiter, [limit], [Compare]])
expression=必須。文字列と区切り文字が含まれる文字列式。長さ0文字列(“”)の場合、Splitは空の配列、つまり、要素とデータのない配列を返します。
delimiter=省略可能。区切り文字。省略すると半角空白文字(” “)とみなされます。
limit=省略可能。返される文字列の数。-1は、すべての文字列が返されることを示す。
Compare=省略可能。文字列の比較の種類を示す数値。
Compare引数には、次の値を指定できます。
vbBinaryCompare=バイナリ比較を実行。
vbTextCompare=テキスト比較を実行。
vbDatabaseCompare=MicrosoftAccessのみ。データベース内の情報に基づいて比較を実行。
VBAで文字列を分割する例
氏名を姓と名で分割します。
Sub test()
Dim i As Long
Dim str As Variant
With ActiveSheet
For i = 1 To 10
str = Split(.Cells(i, 1), “ ”)
.Cells(i, 2).Value = str(0)
.Cells(i, 3).Value = str(1)
Next i
End With
End Sub
メールアドレスをユーザー名とドメインで分割します。
Sub test()
Dim i As Long
Dim str As Variant
With ActiveSheet
For i = 1 To 10
str = Split(.Cells(i, 1), “@”)
.Cells(i, 2).Value = str(0)
.Cells(i, 3).Value = str(1)
Next i
End With
End Sub
電話番号を市外局番、市内局番、加入者番号で分割します。
※B、C、D列は、セルの書式設定で「文字列」にしています。
Sub test()
Dim i As Long
Dim str As Variant
With ActiveSheet
For i = 1 To 10
str = Split(.Cells(i, 1), “-“)
.Cells(i, 2).Value = str(0)
.Cells(i, 3).Value = str(1)
.Cells(i, 4).Value = str(2)
Next i
End With
End Sub
こんな記事も書いています