VBA Split 関数:文字列を分割して配列にする

はじめに

Excel VBA マクロの Split 関数から文字列を分割して配列にする方法を紹介します。

Split 関数は、文字列を区切り文字で分割して配列に変換します。

A,B,C のカンマ区切りの文字列なら A B C の配列に変換できます。

カンマ区切りの文字列を配列に分割したいときに使用します。

配列をカンマ区切りの文字列にしたいときは「Join 関数」を使用します。
  • 目次
    • Split 関数
    • 解説
    • 使用例

Split 関数

Split(文字列)
半角スペースで区切られた文字列を分割して配列に変換します。

Split(文字列, 区切り文字, 最大分割数, 比較モード)
指定した区切り文字で分割します。最大分割数で分割する数を指定できます。比較モードで大文字と小文字を区別するか指定できます。

引数「文字列」文字列を指定します。
引数「区切り文字」省略できます。分割する区切り文字を指定します。
引数「最大分割数」省略できます。区切り文字で分割する最大数を指定します。
引数「比較モード」省略できます。引数「区切り文字」の大文字と小文字を区別して検索するかを指定します。
戻り値の型文字列型の配列 (String)

引数「比較モード」

単位 説明
vbBinaryCompare (既定)「大文字と小文字」、「半角と全角」、「ひらがなとカタカナ」を区別する。
vbTextCompare区別しない。

解説

戻り値を受け取る変数は、String 型の動的配列か Variant 型である必要があります。Variant 型の動的配列だと「エラー 13 型が一致しません。」が発生します。

作成される配列は動的配列で、最小インデックスは 0 からスタートします。

引数「区切り文字」を省略したときは半角スペース " " で分割します。

引数「区切り文字」が見つからないときは、要素数が 1 つの配列を返します。配列の最初の要素に引数「文字列」がそのまま入っています。

引数「区切り文字」が空文字 "" なら、要素数が 1 つの配列を返します。配列の最初の要素に引数「文字列」がそのまま入っています。

引数「最大分割数」を省略したときは、引数「区切り文字」ですべて分割した配列を返します。これは -1 を指定したときと同じです。

引数「最大分割数」が 1 なら、要素数が 1 つの配列を返します。配列の最初の要素に引数「文字列」がそのまま入っています。

引数「最大分割数」に 2 なら、要素数が 2 つの配列を返します。最初に見つかった区切り文字の位置で分割されます。

使用例

文字列を分割して配列にする。

Sub 実行()
    Dim list() As String

    list = Split("a-b-c")
    Call PrintArray(list) ' 0=a-b-c
    
    list = Split("a-b-c", "") ' 空文字が区切り文字
    Call PrintArray(list) ' 0=a-b-c

    list = Split("a b c") ' " " が区切り文字
    Call PrintArray(list) ' 0=a, 1=b, 2=c

    list = Split("a-b-c", "-")
    Call PrintArray(list) ' 0=a, 1=b, 2=c

    list = Split("a-b-c", "-", 1) ' 最大分割数 1
    Call PrintArray(list) ' 0=a-b-c

    list = Split("a-b-c", "-", 2) ' 最大分割数 2
    Call PrintArray(list) ' 0=a, 1=b-c

    list = Split("a-b-c", "-", 4) ' 最大分割数 4
    Call PrintArray(list) ' 0=a, 1=b, 2=c
End Sub

Sub PrintArray(list As Variant)
    Dim i As Integer
    For i = LBound(list) To UBound(list)
        Debug.Print(i & "=" & list(i))
    Next
End Sub

配列をカンマ区切りに変換

Join 関数」を使用して、配列を区切り文字で結合できます。

Dim 配列(2) As String
配列(0) = "ああ"
配列(1) = "いい"
配列(2) = "うう"

s = Join(配列, ",")
Debug.Print(s) ' ああ,いい,うう