Split関数で文字列を区切り文字で分割します
皆さん、今日も元気に VBA してますか~?
VBA ハイマスターこばとちゃんも毎日元気に VBA してますよ~。
今回は Split関数を使って文字列を切り分ける方法 を勉強しましょ~。
Split関数 は文字列をデリミタで区切って、それぞれを 1 次元配列に格納します。
「デリミタ」というのは「ここが分割する場所だよ」という目印になる記号のことです。何を指定してもいいんだけど、普通は「、」とか「, 」とか、半角スペースを指定します。「分割数」と「比較方法」については、滅多に使う機会もないし、説明するのが面倒くさいので、ここは省略しちゃってください。要するに Split関数は
で使うものだと覚えましょ~。デリミタを省略すると半角スペースを指定したものとみなされます。
それでは今回のサンプルコードです♪
Sub SplitString()
Dim i As Integer
Dim mystr As String
Dim myarray() As String
mystr = "こばとちゃんは、今日も元気に、飛び回っています"
myarray = Split(mystr, "、")
For i = 0 To UBound(myarray)
Debug.Print myarray(i)
Next i
End Sub
分割された文字を格納するための変数は配列変数にしておくことを忘れないようにしてください。上のコードでは myarray() を配列変数として宣言しています。デリミタは「、」です。サンプルコードを実行すると
今日も元気に
飛び回っています
と表示されます。
もうひとつサンプルコードを作っておきましょ~。
まずは、こんなワークシートを用意してくださいな。
図のように、A 列に氏名が入力されていて、苗字と名前が半角スペースで区切られている場合は、次のマクロで苗字と名前を B 列と C 列に分割することができます。
Sub SplitName()
Dim i As Long
Dim ect As Long, rct As Long
Dim mystr As String
Dim myname As Variant
'シートの行数を数えます
ect = ActiveSheet.Rows.Count
'A 列の最終行を得ます
rct = Cells(ect, 1).End(xlUp).Row
'2 行目から最終行まで苗字と名前を分割します
For i = 2 To rct
myname = Split(Cells(i, 1))
Cells(i, 2) = myname(0)
Cells(i, 3) = myname(1)
Next i
End Sub
このマクロを実行すると、B 列に苗字、C 列に名前のデータが入ります。