データの集計や加工を行う際、1つのセルにまとめられた複数項目を区切り文字で分割したいというケースは非常に多く見られます。特にCSV形式のデータを貼り付けた場合など、セルごとに「名前,日付,住所…」のような構造になっていることがあります。
本記事では、VBAの TextToColumns
メソッドを用いて、カンマなどの区切り文字でセルの内容を分割し、それぞれを列に展開する方法をご紹介いたします。
目次
使用シナリオの例
- A2セルから始まる範囲に、次のような形式のデータが含まれているとします:
John,2025/07/30,Tokyo,A123,備考
Mary,2025/07/31,Osaka,B456,注記
- 各項目を「カンマ」で区切り、B列以降に展開して整形したい。
VBAコード:TextToColumnsの基本とFileInfoによる書式制御
Sub SplitCellContentByComma()
With ThisWorkbook.Worksheets(1).Range("B2").CurrentRegion
.TextToColumns _
DataType:=xlDelimited, _
Comma:=True, _
FieldInfo:=Array( _
Array(1, xlTextFormat), _
Array(2, xlYMDFormat), _
Array(3, xlTextFormat), _
Array(4, xlGeneralFormat), _
Array(5, xlSkipColumn))
.EntireColumn.AutoFit
End With
End Sub
各パラメータの解説
引数 | 説明 |
---|---|
DataType | 区切り文字による分割を指定(xlDelimited ) |
Comma:=True | カンマが区切り文字であることを指定 |
FieldInfo | 各列のデータ形式やスキップ指定を行う(詳細は下記を参照) |
FieldInfo
配列の内容
列番号 | 書式指定 | 内容例 |
---|---|---|
1 | xlTextFormat | 名前(例:John) |
2 | xlYMDFormat | 日付(例:2025/07/30) |
3 | xlTextFormat | 地域(例:Tokyo) |
4 | xlGeneralFormat | コード(例:A123) |
5 | xlSkipColumn | 備考(読み飛ばし) |
実行結果イメージ
B列 | C列 | D列 | E列 |
---|---|---|---|
John | 2025/07/30 | Tokyo | A123 |
Mary | 2025/07/31 | Osaka | B456 |
応用ポイント
- 区切り文字はカンマ以外にも、タブ(
Tab:=True
)、セミコロン(Semicolon:=True
)、スペース(Space:=True
)などにも対応可能です。 FieldInfo
を活用すれば、**「スキップする列」「日付扱いする列」「数値として扱う列」**を細かく指定できます。- CSVファイルを開かずにコピー&ペーストされたデータを整形する場面にも非常に有効です。
注意点
- 元データの中にカンマが含まれている文字列(例:「Tokyo, Japan」)があると、意図せぬ分割が発生する可能性があります。
TextToColumns
は対象セルの中身を上書きしますので、必要であれば事前にバックアップしてください。
まとめ
VBAの TextToColumns
を使えば、セル内の区切り文字を基にしてデータを自動的に整形・分割することが可能です。FieldInfo
を活用することで、ただ分割するだけでなく、列ごとの書式指定やスキップなどの高度な制御も行えます。
日々のデータ処理業務を効率化したい方は、ぜひこのテクニックを取り入れてみてください。