VBA(Visual Basic for Applications)で文字列を分割して扱う場面は多くあります。たとえば、カンマ区切りのデータを分けたり、スペースで区切られたテキストから必要な情報だけを抜き出したりする際に便利なのがSplit
関数です。
この関数を使いこなすことで、文字列処理の効率が格段にアップします。この記事では、VBAのSplit
関数の基本から応用までを、実際のコード例を交えてわかりやすく解説します。VBA初心者の方にも理解しやすいように構成していますので、ぜひ最後までご覧ください。
VBAのSplit
関数は、指定した区切り文字で文字列を分割し、その結果を配列として返してくれる便利な関数です。
文法は以下の通りです。
Split(expression, [delimiter], [limit], [compare])
vbBinaryCompare
やvbTextCompare
など)Dim result() As String
result = Split("Apple,Banana,Orange", ",")
この例では、result(0)
に”Apple”、result(1)
に”Banana”、result(2)
に”Orange”が格納されます。
次に、実際のコードを使ってカンマで区切られた文字列を分割する基本的な例を見てみましょう。
Sub SplitExample1()
Dim fruits As String
Dim fruitArray() As String
Dim i As Integer
fruits = "Apple,Banana,Orange"
fruitArray = Split(fruits, ",")
For i = LBound(fruitArray) To UBound(fruitArray)
Debug.Print fruitArray(i)
Next i
End Sub
このコードを実行すると、イミディエイトウィンドウに以下のように表示されます:
Apple
Banana
Orange
Split
関数の第二引数(区切り文字)を省略した場合、デフォルトではスペースで分割されます。
Dim words() As String
words = Split("This is a pen") ' 区切り文字なし(スペースが使われる)
この場合、配列words
の中身は "This"
, "is"
, "a"
, "pen"
となります。
Split
関数には、分割結果の要素数を制限する機能があります。第三引数に数値を指定することで、その数だけ要素を返します。
Dim items() As String
items = Split("a,b,c,d,e", ",", 3)
この例では、items
の中身は a
, b
, c,d,e
の3つに分割されます。最後の要素には残りの文字列がそのまま入ります。
第四引数では、文字列の比較方法を指定できます。vbBinaryCompare
(大文字小文字を区別)や、vbTextCompare
(大文字小文字を区別しない)があります。
Dim parts() As String
parts = Split("A,a,B,b", "A", -1, vbTextCompare)
この場合、vbTextCompare
を使用しているため、大文字小文字を区別せずに”A”で分割されます。
分割したデータをExcelのセルに出力したい場合は、以下のようなコードになります。
Sub OutputToCells()
Dim txt As String
Dim arr() As String
Dim i As Integer
txt = "Red,Green,Blue"
arr = Split(txt, ",")
For i = 0 To UBound(arr)
Cells(i + 1, 1).Value = arr(i)
Next i
End Sub
このマクロを実行すると、A1からA3のセルにそれぞれ”Red”、”Green”、”Blue”が出力されます。
CSVファイルを扱うときにもSplit
関数は役立ちます。
Sub ParseCSVLine()
Dim line As String
Dim fields() As String
line = "1001,Yamada,Taro,Tokyo"
fields = Split(line, ",")
Debug.Print "ID: " & fields(0)
Debug.Print "Name: " & fields(1) & " " & fields(2)
Debug.Print "City: " & fields(3)
End Sub
CSVの1行からID・氏名・住所などの情報を取り出して処理することが可能になります。
→ UBound
やLBound
を使って要素数を確認することが大切です。
→ 区切り文字が文字列に存在しない場合、配列の要素数は1になります。
→ 一度Splitした結果に対して、さらにSplitを使うことができます。
Split
関数は、文字列を指定した区切り文字で分割して配列で返す便利な関数。Split
関数を使いこなすことで、文字列の解析やデータ整形が非常に効率的になります。基本を押さえつつ、実践的な応用も試してみてください。VBAでの文字列処理の幅がぐんと広がります。