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

📖 使い方
- VBAエディタを開く(Alt + F11)
- モジュールを挿入(挿入 > モジュール)
- 下記VBAコードをコピー&ペースト
- ブック上で実行(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