トップページ >
Excel >
VBA >
Split関数で文字列を区切る
Split関数で文字列を区切る
ここ最近、私が最もよく使うVBAコマンドのひとつは
Split関数です。特に、テキストファイルやHTMLソースなど外部のファイルを編集・加工するときには必須の関数です。今回はSplit関数を例にして、任意の文字列を区切るテクニックをご紹介します。
Split関数は、ある要素で区切られた文字列を、その要素で区切り、区切られた各文字列を、一次元配列として返します。言葉で表すとややこしいですが、要するに次のような処理をしてくれます。
「123,田中,toru」のように、データが「,」で区切られた文字列があったとします。この文字列をSplit関数は、「123」「田中」「toru」という3つの要素を持つ配列に変換してくれます。CSVファイルのデータを扱うときなどに便利ですね。
Split関数の返り値は「任意の要素を持つ一次元配列」です。あらかじめ要素の数が明らかなときは、それを受け取る配列変数を用意しておけばいいのですが、一般的にはいくつの要素が返るかわかりません。そんなときは、Split関数の返り値(配列)を
バリアント型変数で受け取ります。バリアント型変数に配列を格納すると、変数を配列として操作できるようになります。
Sub Sample()
Dim buf As String, tmp, i As Long
buf = "123,田中,toru"
tmp = Split(buf, ",")
For i = 0 To UBound(tmp)
MsgBox tmp(i)
Next i
End Sub
非常に短いこのコードには、いくつかのポイントがあります。まず、Split関数の返り値を受け取る変数tmpが、型宣言されていない点に留意してください。これは変数tmpを
バリアント型で宣言しているのと同じことです。
変数tmpに格納された配列の各要素をFor Nextステートメントで順番に取り出しています。このとき、配列の先頭は
tmp(0)から始まります。tmp(1)ではありませんので注意が必要です。
変数tmp内にいくつの要素が含まれているかは
UBound関数で知ることができます。上記のサンプルでは、Ubound関数が「2」を返します。
今度は次のようなデータで考えてみましょう。
名前:田中 住所:横浜市 年齢:42 金額:1,234
名前:森 住所:我孫子市 年齢:38 金額:567
名前:日下部 住所:港区 年齢:41 金額:8,901
テキストファイル(C:\sample.txtとします)に上のようなデータが記録されています。空白に見える部分は、実際には
タブで区切られています。また、各要素は「名前:田中」のようにタイトルとデータが「:」で区切られています。このテキストファイルを読み込み、ワークシートに展開するサンプルを紹介します。
Sub Sample2()
Dim buf As String, tmp, tmp2, i As Long, cnt As Long
Open "C:\sample.txt" For Input As #1
Do Until EOF(1)
Line Input #1, buf
cnt = cnt + 1
tmp = Split(buf, Chr(9)) ''1行の文字列をタブで区切る
For i = 0 To UBound(tmp)
tmp2 = Split(tmp(i), ":") ''各要素を「:」で区切る
Cells(cnt, i + 1) = tmp2(1)
Next i
Loop
Close #1
End Sub
実行結果は次の通りです。
ここではSplit関数を2回使っています。
1回目:1行分の文字列を
タブで区切る
2回目:各要素を「
:」で区切る
タブ記号はChr関数を使って、Chr(9)を指定します。
2回目のSplit関数で区切られた配列tmp2では、tmp2(0)に「名前」などのタイトルが入り、tmp2(1)に「田中」などのデータが格納されます。
[目次]に戻る