📊 Excel VBA Top100
🔄

SplitCellData

データ処理

選択セルの内容を区切り文字で分割して隣接するセルに展開します

一つのセルに複数の情報がまとめて入力されているデータを、指定した区切り文字(カンマ・スペース・ハイフンなど)で分割して複数列に展開するマクロです。「姓 名」を姓列・名列に分ける・「都道府県市区町村」を分割する・「コード-名称」形式のデータを分解するなど、データ整形の場面で幅広く使えます。TextToColumns機能のVBA版として、繰り返し行う分割処理の自動化に役立ちます。Split関数で文字列を分解し、隣接セルへ順に書き込むシンプルな構造のため、区切り文字の変更や分割数の上限設定などのカスタマイズも容易です。手動の「区切り位置」ウィザードは手順が多く設定を毎回やり直す必要がありますが、マクロなら同じ設定での分割を何度でも一瞬で再現できます。分割→NormalizeData→ConvertTextToNumbersと繋げば、混在データの整形が一連の流れで完了します。

SplitCellData デモ

📖 使い方

  1. VBAエディタを開く(Alt + F11)
  2. モジュールを挿入(挿入 > モジュール)
  3. 下記VBAコードをコピー&ペースト
  4. ブック上で実行(Alt + F8 でマクロ選択)
💡 実行例: 分割したいセルを選択してから SplitCellData を実行します

🎯 活用シーン

  • ✓「姓 名」の形式で一列に入力された氏名データを姓と名に分割して、五十音順ソートや個別参照をしやすくしたいとき
  • ✓「商品コード-商品名」のように複合キー形式で入力されたデータを分解して、コードと名称を別列で管理したいとき
  • ✓住所データが「都道府県市区町村番地」の形式で一列に入力されている場合に、各要素を別列に分割して整理したいとき
  • ✓「2026/07/02 14:30」のような日時データを日付と時刻の列に分けて、時間帯別の分析をしたいとき
  • ✓メールアドレスを@で分割してドメイン別の集計を行い、法人・個人の割合を把握したいとき

💡 実装のヒント

  • ▸分割後のデータが展開される右隣の列にデータが入っている場合、上書きされてしまいます。分割前に右側に空き列があることを確認してください。
  • ▸区切り文字が複数種類混在する場合(「、」と「,」が混在するなど)は、事前にFindAndReplaceで統一してから分割することをお勧めします。
  • ▸分割後の値は文字列として扱われます。数値として使用したい場合はConvertTextToNumbersを実行してください。
  • ▸1回で分割される列数はデータ内の区切り文字の数で決まります。事前に最大何列になるかを確認して空き列を確保してください。
  • ▸区切り文字なしで「先頭から3文字だけ切り出す」ような固定長分割が必要な場合は、LEFT/MID関数の利用かマクロの修正で対応します。

💻 VBAコード

' SplitCellData
' -----------------
' Macro Name: SplitCellData
' Description: 選択セルの内容を区切り文字で分割して隣接するセルに展開します
' Parameters: なし
' Returns: なし
' Usage: 分割したいセルを選択してから SplitCellData を実行します
' -----------------

Sub SplitCellData()
    On Error GoTo ErrorHandler

    Dim cell As Range
    Dim delimiter As String
    Dim parts() As String
    Dim i As Long

    If TypeName(Selection) <> "Range" Then
        MsgBox "セルを選択してから実行してください", vbCritical, "エラー"
        Exit Sub
    End If

    Set cell = Selection.Cells(1, 1)

    If IsEmpty(cell) Then
        MsgBox "選択したセルが空です", vbCritical, "エラー"
        Exit Sub
    End If

    delimiter = InputBox("区切り文字を入力してください(例: , またはスペース)", "区切り文字", ",")
    If delimiter = "" Then Exit Sub

    parts = Split(CStr(cell.Value), delimiter)

    For i = 0 To UBound(parts)
        cell.Offset(0, i).Value = Trim(parts(i))
    Next i

    MsgBox (UBound(parts) + 1) & " 個のデータに分割しました", vbInformation, "完了"

    Exit Sub

ErrorHandler:
    MsgBox "エラーが発生しました:" & vbCrLf & Err.Description, vbCritical, "エラー"
End Sub