📊 Excel VBA Top100
🔄

TextToColumns

データ処理

選択したセルの内容を指定した区切り文字で複数列に分割します

選択したセルのテキストデータを指定した区切り文字で分割し、複数の列に自動展開するマクロです。Excelの「テキストから列へ」ウィザード(データタブ)と同等の機能をVBAで実現しており、カンマ・タブ・スペース・セミコロンなどの区切り文字に対応しています。CSVからインポートしたデータや、1セルに複数項目が入力されたデータの整形処理を迅速に行えます。固定幅での分割にも対応しています。WorksheetのTextToColumnsメソッドをVBAから呼び出しているため、Excel標準ウィザードの信頼性をそのまま自動化できます。ウィザードでは毎回複数ステップの設定が必要ですが、マクロ化すれば同じ設定を保存して何度でも即座に適用可能です。SplitCellDataがループ処理で柔軟性重視なのに対し、こちらは標準機能ベースで大量データに強いという違いがあり、データ量や用途で使い分けられます。

TextToColumns デモ

📖 使い方

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

🎯 活用シーン

  • ✓システムからエクスポートしたタブ区切りのテキストデータを適切な列に整形してExcelで分析したいとき
  • ✓1列に「名前,年齢,部署」のようにカンマ区切りで入力されたデータを各列に展開して表形式に整えたいとき
  • ✓固定長フォーマットのデータファイルを読み込んで、各フィールドを適切な列に分割して使いやすくしたいとき
  • ✓基幹システムのタブ区切りエクスポートを毎日Excelに整形する作業を1クリックにしたいとき
  • ✓「郵便番号 住所」形式の一括データをスペース区切りで分割して宛名リストを作成したいとき

💡 実装のヒント

  • ▸処理後、元のセルの右隣からデータが展開されます。十分な空き列があることを確認してから実行してください。
  • ▸区切り文字として正規表現は使用できないため、複雑なパターンでの分割はマクロのカスタマイズが必要です。
  • ▸固定幅モードを使用する場合は、分割位置(文字数)を事前に確認してから指定してください。
  • ▸数十万行規模の大量データの分割は、ループ処理よりこの標準機能ベースのマクロの方が高速です。
  • ▸分割時に各列のデータ形式(文字列/日付など)を指定したい場合は、コードのFieldInfo引数を編集してください。先頭の0が消える問題の対策にも有効です。

💻 VBAコード

' TextToColumns
' -----------------
' Macro Name: TextToColumns
' Description: 選択したセルの内容を指定した区切り文字で複数列に分割します
' Parameters: なし
' Returns: なし
' Usage: 分割したいセル範囲を選択してから TextToColumns を実行します
' -----------------

Sub TextToColumns()
    On Error GoTo ErrorHandler

    Dim rng As Range
    Dim delimiter As String

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

    Set rng = Selection

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

    rng.TextToColumns Destination:=rng.Cells(1, 1), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, _
        Other:=True, OtherChar:=delimiter

    MsgBox "テキストを列に分割しました", vbInformation, "完了"

    Exit Sub

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