Excel VBAでセル内のデータをカンマ区切りで分割して列に展開する方法 ~TextToColumnsとFileInfoの活用による細かな制御~

データの集計や加工を行う際、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配列の内容

列番号書式指定内容例
1xlTextFormat名前(例:John)
2xlYMDFormat日付(例:2025/07/30)
3xlTextFormat地域(例:Tokyo)
4xlGeneralFormatコード(例:A123)
5xlSkipColumn備考(読み飛ばし)

実行結果イメージ

B列C列D列E列
John2025/07/30TokyoA123
Mary2025/07/31OsakaB456

応用ポイント

  • 区切り文字はカンマ以外にも、タブ(Tab:=True)、セミコロン(Semicolon:=True)、スペース(Space:=True)などにも対応可能です。
  • FieldInfo を活用すれば、**「スキップする列」「日付扱いする列」「数値として扱う列」**を細かく指定できます。
  • CSVファイルを開かずにコピー&ペーストされたデータを整形する場面にも非常に有効です。

注意点

  • 元データの中にカンマが含まれている文字列(例:「Tokyo, Japan」)があると、意図せぬ分割が発生する可能性があります。
  • TextToColumns は対象セルの中身を上書きしますので、必要であれば事前にバックアップしてください。

まとめ

VBAの TextToColumns を使えば、セル内の区切り文字を基にしてデータを自動的に整形・分割することが可能です。
FieldInfo を活用することで、ただ分割するだけでなく、列ごとの書式指定やスキップなどの高度な制御も行えます。

日々のデータ処理業務を効率化したい方は、ぜひこのテクニックを取り入れてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次