【VBAマクロ】Split関数の使い方|文字列の分割をマスターしよう

スポンサードリンク
VBA
  • VBAで文字列を分割する方法が知りたい
  • 「1234-56-789」という番号から「1234」や「56」を抽出したい
  • Split関数の使い方が知りたい

このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。

  • VBAで文字列を分割する方法が学べる
  • Split関数の使い方がわかる
  • Split関数を扱う際の注意点を知れる

VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。

※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。

スポンサードリンク

Split関数とは?

「Split」は、文字列を分割することができる関数です。
例えば、セル内に「1234-56-789」という文字列が入っていたとします。
この文字列の「-(ハイフン)」を基準に「1234」「56」「789」という具合に分割することができます。

基準とする文字(区切り文字)は「-」だけでなく、任意で指定できます。

▼よく使う区切り文字

  • 「_」アンダーバー:「1234_56」 → 「1234」と「56」に分割
  • 「 」半角スペース:「田中 一郎」 → 「田中」と「一郎」に分割
  • 「/」スラッシュ:「utatane/test.xlsx」 → 「utatane」と「test.xlsx」に分割
  • 「,」カンマ:「abcd,efg」 → 「abcd」と「efg」に分割
  • 「.」ドット:「Ichiro.Tanaka」 → 「Ichiro」と「Tanaka」に分割

では、Split関数の使い方を見ていきましょう。

スポンサードリンク

Split関数の使い方

まずはシンプルな使い方をお見せします。

シンプルな使い方

Sub シンプルsplit() ' プロシージャを作成
    Dim arr As Variant ' 配列を宣言
    arr = Split("1234-56-789", "-") ' 区切り文字を「-」で指定
    Debug.Print arr(0) ' 1234
    Debug.Print arr(1) ' 56
    Debug.Print arr(2) ' 789
End Sub

上記コードにて、文字列を分割することができます。

実行結果

まずは2行目で配列を宣言します。

    Dim arr As Variant ' 配列を宣言

(「Variant」は数字や文字列など、どんな値でも入れることができる型です)
配列については下記記事をご参考ください。

3行目は、Split関数で文字列を分割し、配列に代入しています。

    arr = Split("1234-56-789", "-") ' 区切り文字を「-」で指定

()内に、「対象となる文字列」「区切り文字」を指定します。
今回は、「-」を区切り文字にしました。

半角スペースを区切り文字にする場合は、指定を省略することができます。

    arr = Split("1234 56 789") ' 区切り文字を半角スペース「 」で指定(省略)
    Debug.Print arr(0) ' 1234
    Debug.Print arr(1) ' 56
    Debug.Print arr(2) ' 789

4~6行目で、配列の各要素に入った値を「Debug.Print」で表示させています。
「Debug.Print」の表示方法は下記記事をご参考ください。

変数を経由して文字列を分割することもできます。

Sub シンプルsplit() ' プロシージャを作成
    Dim model AS Variant ' 変数を宣言
    Dim arr As Variant ' 配列を宣言
    model = "1234-56-789" ' 変数に文字列を代入
    arr = Split(model, "-") ' 区切り文字を「-」で指定
    Debug.Print arr(0) ' 1234
    Debug.Print arr(1) ' 56
    Debug.Print arr(2) ' 789
End Sub

結果は先ほどと同じです。

高度な使い方

次に、少し高度な使い方を見ていきましょう。

limit(最大分割数)の指定

まずはlimit(最大分割数)を指定する方法です。
あまりピンと来ないかもしれませんので、まずは下記VBAコードを見てください。

Sub 高度なsplit() ' プロシージャを作成
    Dim arr As Variant ' 配列を宣言
    arr = Split("1234-56-789", "-", 2) ' limitを「2」に指定
    Debug.Print arr(0) ' 1234
    Debug.Print arr(1) ' 56-789
End Sub

3行目に注目です。

【 配列 = Split(文字列, 区切り文字, limit) 】

limit(最大分割数)を「2」にしてみました。
その他は前項と同じです。
実行結果を見てみましょう。

limitを指定した場合の実行結果

2つめの区切り文字では分割されず、「56-789」という文字列が出力されました。
これが「limit」の効果で、分割数を制限することができます。

例えば、「ハイフンまでの1234を取り出したい」ときなどに便利です。
用意する配列も最大2つでいいので、ハイフンがいくつあるのかわからない場合でも安心です。
(「実践的な使い方」でコードを掲載)

limitのデフォルトは「-1」で無制限です。
前項のように指定しなければ「-1」が指定され、制限なく分割できます。

compareを指定して区切り文字の大文字・小文字を区別

次に、区切り文字の大文字・小文字を区別する方法です。
全くピンと来ないと思いますので、まずは区切り文字を「Z」にした場合のサンプルコードをお見せします。
まだ「compare」は指定していません。

Sub 高度なsplit() ' プロシージャを作成
    Dim arr As Variant ' 配列を宣言
    arr = Split("abcdZefzghi", "Z") ' 区切り文字を「Z」で指定
    Debug.Print arr(0) ' abcd
    Debug.Print arr(1) ' efzgh
    Debug.Print arr(2) ' 値なし(エラー)
End Sub

区切り文字に指定したのは大文字の「Z」です。
しかしながら、8文字目の「z」を間違えて小文字にしてしまったため、うまく区切ることができませんでした。

今度は「compare」を指定して再度実行してみます。

Sub 高度なsplit() ' プロシージャを作成
    Dim arr As Variant ' 配列を宣言
    arr = Split("abcdZefzghi", "Z", -1, vbTextCompare) ' 区切り文字を「Z」で指定し、大文字小文字を区別しないように指定
    Debug.Print arr(0) ' abcd
    Debug.Print arr(1) ' ef
    Debug.Print arr(2) ' ghi
End Sub

【 配列 = Split(文字列, 区切り文字, limit, compare) 】

「comprare」を指定する場合は、「limit」も省略せずに指定する必要があります。

compareを指定した場合の実行結果

うまく区切ることができました。

【compare】

  • vbBinaryCompare:区切り文字の大文字・小文字を区別する(デフォルト/省略した場合)
  • vbTextCompare:区切り文字の大文字・小文字を区別しない

実践ではほとんど使うことがないので、参考程度で大丈夫です。
では、より実践的な使い方を見ていきましょう。

実践的な使い方

下記のVBAコードは、A1セルに書き込みされた文字列を分割して、B1~D1セルに書き込みした例です。

Sub 実践的split() ' プロシージャを作成
    Dim model AS Variant ' 変数を宣言
    Dim arr As Variant ' 配列を宣言
    model = Range("A1").Value ' 変数にセルの値を代入
    arr = Split(model, "-") ' 区切り文字を「-」で指定

    Range("B1").Value = arr(0) ' 1つめの「-」までの文字をB1セルに書き込み
    Range("C1").Value = arr(1) ' 2つめの「-」までの文字をC1セルに書き込み
    Range("D1").Value = arr(2) ' 終わりまでの文字をD1セルに書き込み
End Sub
セルの値を分割した例

A列の文字列を一括処理することもできます。

Sub 実践的split() ' プロシージャを作成
    Dim model AS Variant ' 文字列を格納する変数を宣言
    Dim arr As Variant ' 配列を宣言
    Dim i As Integer ' カウント用の変数を宣言
    For i = 1 to 5
        model = Cells(i,1).Value ' A列のセルの値を変数に代入
        arr = Split(model, "-", 2) ' 区切り文字を「-」/limitを「2」で指定
        Cells(i,2).Value = arr(0)
        Cells(i,3).Value = arr(1)
    Next i
End Sub
A列の文字列を一括して分割した例

1つめの「-」までの文字を取り出したい場合に便利です。

繰り返しにはFor文を使用しています。
For文の詳しい解説は、下記記事をご参考ください。

では次に、Split関数の注意点を見ていきましょう。

スポンサードリンク

Split関数の注意点

区切り文字が無い場合

指定した区切り文字が文字列の中に無い場合は、文字列を分割することができません。

Sub 注意点1()
    Dim arr As Variant
    arr = Split("1234-56-789", ",")
    Debug.Print arr(0) ' 「,」が無いため分割されない
End Sub
区切り文字が無かった場合の実行結果

文字列が分割されずにそのまま出力されました。

空の要素が含まれる場合

区切り文字が連続している場合は、配列の要素に空の値が代入されます。

Sub 注意点2()
    Dim arr As Variant
    arr = Split("1234--789", "-")
    Debug.Print arr(0) ' 1234
    Debug.Print arr(1) ' (空)
    Debug.Print arr(2) ' 789
End Sub
区切り文字が連続していた場合の実行結果

その後の処理によってはエラーとなるため、注意しましょう。

スポンサードリンク

最後に

VBAのSplit関数について解説いたしました。

当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました