はじめに
VBAで、"東京/大阪/名古屋/福岡"
のように、特定の区切り文字(この場合は /
)で区切られた一つの長い文字列を扱う場面はよくあります。このような文字列から、各都市名を個別のデータとして取り出したい場合、どうすればよいでしょうか?
手作業で分割するのは大変ですが、VBAの Split()
関数を使えば、この作業を一瞬で完了させることができます。Split
関数は、指定した区切り文字を基準に文字列を分割し、その結果を配列として返してくれる非常に便利な関数です。
この記事では、Split
関数の基本的な使い方と、返された配列の活用方法について、分かりやすく解説します。
Split
関数を使ったサンプルコード
このマクロは、B2
セルに入力された、カンマ(,
)で区切られた文字列を分割し、配列に格納します。その後、配列の各要素をC列に順番に書き出します。
完成コード
' Split関数で文字列を配列に分割する
Sub SplitStringToArray()
Dim sourceText As String
Dim dataArray As Variant
Dim i As Long
'--- 1. 分割したい元の文字列を準備 ---
' B2セルの値を取得
sourceText = Worksheets("Sheet1").Range("B2").Value
'--- 2. Split関数で、カンマを基準に文字列を分割 ---
dataArray = Split(sourceText, ",")
'--- 3. 分割された配列の各要素をセルに書き出す ---
' Splitが返す配列は0始まりなので、LBound/UBoundを使うと確実
For i = LBound(dataArray) To UBound(dataArray)
' C3セルから下方向に書き出し
Worksheets("Sheet1").Range("C3").Offset(i, 0).Value = dataArray(i)
Next i
MsgBox "文字列の分割が完了しました。"
End Sub
実行前の準備
Sheet1
のB2
セルに、"商品A,商品B,商品C,商品D"
のような、カンマで区切られた文字列を入力しておきます。
コードの解説
dataArray = Split(sourceText, ",")
これが Split
関数の核心部分です。
Split(対象の文字列, 区切り文字)
- 第1引数 (
sourceText
): 分割したい文字列が入った変数や、文字列そのものを指定します。 - 第2引数 (
,
): 何を基準に分割するか、区切り文字(デリミタ)を文字列で指定します。この例ではカンマ,
を指定していますが、スラッシュ/
や、タブvbTab
など、任意の文字列を指定できます。
Split
関数は、分割された文字列を格納したVariant型の配列を返します。配列のインデックスは、デフォルトで 0
から始まります。
For i = LBound(dataArray) To UBound(dataArray)
Split
関数が返した配列をループで処理しています。LBound
(最小インデックス)とUBound
(最大インデックス)を使うことで、分割後の要素数がいくつであっても、全ての要素を確実に取り出すことができます。
まとめ
今回は、VBAの Split
関数を使って、区切り文字で連結された一つの文字列を、簡単に配列に変換する方法を解説しました。
Split(文字列, 区切り文字)
の構文で、文字列を配列に分割できる。- 返される配列は0始まりの Variant型。
CSVデータのようにカンマで区切られた一行のデータや、複数のキーワードが特定の記号で連結された文字列をパース(解析)する際に、Split
関数は絶大な威力を発揮します。VBAでの文字列操作における必須のテクニックですので、ぜひ覚えておきましょう。