【ExcelVBA・マクロ】Split関数の使い方|文字列を区切って配列に分割する方法【コピペOK】

ExcelVBA

Split関数とは

Split関数は、指定した区切り文字をもとに文字列を分割し、結果を配列として取得できるVBAの標準関数です。CSV形式の文字列やスペース区切りのデータを扱うときに非常によく使われます。

対になる関数としてJoin関数(配列を1つの文字列に結合する関数)がありますが、Split関数はその逆の処理、つまり「1つの文字列を配列に分解する」処理を担当します。この記事では、Split関数の基本的な使い方から、実務でよく使うパターンまで解説します。

スポンサーリンク
スポンサーリンク

基本構文

Split(文字列, [区切り文字], [Limit], [Compare])
引数 説明
文字列 分割したい文字列(必須)
区切り文字 分割に使う文字(省略時は半角スペース)
Limit 分割する要素数の上限(省略時は無制限)
Compare 区切り文字の比較方法(大文字小文字を区別するかどうか)

戻り値は0から始まるインデックスの配列(String型)になります。

基本的な使い方

まずはもっともシンプルな例です。区切り文字を省略すると、半角スペースで分割されます。

Sub SplitSample1()
    Dim arr As Variant
    arr = Split("Excel VBA Macro")

    Debug.Print arr(0) '→ Excel
    Debug.Print arr(1) '→ VBA
    Debug.Print arr(2) '→ Macro
End Sub

Split関数の戻り値は配列なので、受け取る変数はVariant型(または明示的な配列宣言)にしておく必要があります。

区切り文字を指定する

カンマ区切り(CSV形式)の分割

実務でもっともよく使うのが、CSV形式の文字列をカンマで分割するパターンです。

Sub SplitCsvSample()
    Dim arr As Variant
    arr = Split("田中,佐藤,鈴木", ",")

    Dim i As Long
    For i = 0 To UBound(arr)
        Debug.Print arr(i)
    Next i
End Sub

UBound(arr)で配列の最大インデックスを取得し、For文でループすれば、要素数が変わっても柔軟に処理できます。

タブ区切りの分割

タブ区切りのテキストを分割したい場合は、vbTabを区切り文字に指定します。

Sub SplitTabSample()
    Dim arr As Variant
    arr = Split("商品A" & vbTab & "1000" & vbTab & "10個", vbTab)

    Debug.Print arr(0) '→ 商品A
    Debug.Print arr(1) '→ 1000
    Debug.Print arr(2) '→ 10個
End Sub

Limit引数で分割数を制限する

第3引数のLimitを指定すると、分割する要素数の上限を決められます。上限に達すると、残りの文字列はそのまま最後の要素にまとめて格納されます。

Sub SplitLimitSample()
    Dim arr As Variant
    arr = Split("2026-08-03-手順書", "-", 2)

    Debug.Print arr(0) '→ 2026
    Debug.Print arr(1) '→ 08-03-手順書
End Sub

「先頭の1項目だけ取り出したいが、残りは区切らずそのまま使いたい」といった場面で便利です。

Compare引数で大文字・小文字を区別する

区切り文字がアルファベットの場合、Compare引数で大文字・小文字を区別するかどうかを指定できます。

Sub SplitCompareSample()
    Dim arr As Variant

    ' バイナリ比較(大文字・小文字を区別する)
    arr = Split("AxBxC", "x", -1, vbBinaryCompare)
    Debug.Print UBound(arr) + 1 '→ 3

    ' テキスト比較(大文字・小文字を区別しない)
    arr = Split("AXBxC", "x", -1, vbTextCompare)
    Debug.Print UBound(arr) + 1 '→ 3
End Sub

Limit引数を省略できないため、Compare引数だけを指定したい場合はLimitに-1(無制限)を指定します。

実務でよく使うパターン

セルに入力されたCSV文字列を配列に変換して集計する

Sub SplitAndSum()
    Dim target As String
    Dim arr As Variant
    Dim i As Long
    Dim total As Long

    target = Range("A1").Value '例: "100,200,300,400"
    arr = Split(target, ",")

    total = 0
    For i = 0 To UBound(arr)
        total = total + CLng(arr(i))
    Next i

    Debug.Print "合計: " & total
End Sub

セルに入力された文字列を数値の配列に変換し、そのまま集計処理につなげる典型的なパターンです。

複数の区切り文字が混在する場合の対処

Split関数は一度に1種類の区切り文字しか指定できません。カンマとスペースが混在するような文字列は、あらかじめReplace関数で区切り文字を統一してからSplitするとスムーズです。

Sub SplitMixedDelimiter()
    Dim target As String
    Dim arr As Variant

    target = "Excel, VBA スプレッドシート,自動化"
    target = Replace(target, " ", ",") '半角スペースをカンマに統一
    target = Replace(target, ",,", ",") '連続するカンマを1つに整理

    arr = Split(target, ",")

    Dim i As Long
    For i = 0 To UBound(arr)
        If arr(i) <> "" Then Debug.Print arr(i)
    Next i
End Sub

Split関数を使う際の注意点

  • 戻り値は必ず0始まりの配列になります。1件も分割されなかった場合でも、要素数1の配列(分割前の文字列そのもの)が返ります。
  • 区切り文字が連続している場合(例: "A,,B")、間に空文字列の要素が作られます。集計処理などで空文字列を無視したい場合は、If arr(i) <> ""のようなチェックを入れてください。
  • 受け取る変数は必ずVariant型にしてください。String型で受けようとするとエラーになります。

まとめ

Split関数は、区切り文字を基準に文字列を配列へ分解できる、実務での利用頻度が非常に高い関数です。CSV文字列の読み込みや、セル入力値の分解処理など、さまざまな場面で活躍します。逆に配列を1つの文字列にまとめたいときはJoin関数を使うと、Split関数とセットでより効率的にデータを扱えるようになります。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

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