VBA|セルに入力されているデータを複数の列に分割する方法(TextToColumns)

エクセルVBA VBAでセルの操作



セルに入力されている氏名などのデータを複数の列に分割するには、TextToColumnsメソッドを使用します。

今回はTextToColumnsメソッドを使ったセルデータ分割について説明していきます。

やってみると意外と簡単ですよ(笑)



セルに入力されているデータを複数の列に分割する方法(TextToColumns)

以下のように氏名のデータが入った一覧表があるとき、苗字と名にセルを分けて表示するにはTextToColumnsメソッドを使用します。今回は、以下の表のようにデータを分割します。

・データ分割前

・データ分割後

苗字と名の間にスペース(空白文字)が挿入されているとき、 TextToColumns メソッドを使うには、以下の構文になります。※主な引数のみ紹介しています。

Rangeオブジェクト. TextToColumns(Destination, DataType, Tab, Comma, Space)

TextToColumnsメソッドは、1つのセル内で、タブ(Tab)、カンマ(Comma)、スペース(空白文字)(Space)などで区切られているデータを複数のセルに分割することができます。

例えばスペース(空白文字)でセルを分割する場合は、

Rangeオブジェクト. TextToColumns(Destination, DataType, Space:=True)

というように、スペース(Space)を「True」にします。

タブ区切りはTab:=True、カンマ区切りはComma:=True、スペース区切りはSpace:=Trueと設定します。

「Destination」は、分割したデータを入力するセルを指定します。指定したセルを先頭に右側の列に分割されたデータが置換されて入力されます。省略すると、元のセルが分割したデータに置換されます。※省略可能です。

「DataType」は、複数の列に区切るデータの形式を指定します。規定値のままで問題ありません。※省略可能です。

百聞は一見にしかずです。まずはサンプルコードを見てみましょう。

TextToColumnsを使ったVBAサンプルコード

Sub セルデータを分割する()
    Dim i As Long
    Application.DisplayAlerts = False
    For i = 2 To 6
        Cells(i, 1).TextToColumns Destination:=Cells(i, 2), _
                    DataType:=xlDelimited, _
                    Space:=True  'スペースで区切る
    Next i
    Application.DisplayAlerts = True
End Sub

サンプルコードの動作・解説

セル分割実行結果

2行目の Application.DisplayAlerts = False では、データ分割時に表示される確認メッセージが表示されないように設定しています。

ちなみに、設定していないと下図のようなメッセージが表示されてしまいます。

いちいちOKをクリックするのはとても面倒なので、 Application.DisplayAlerts = False に設定します。

分割したいデータがA2~A6にあるので、Forステートメントでi=2~6に設定して、Cells(i, 1)に対して、TextToColumnsメソッドを使用します。

分割したデータをB2とC2に表示したいので、Destination:=Cells(i, 2)に設定します。分割したデータの先頭列を指定すれば、分割された残りのデータは自動的に右列に入っていきます。

DataType:=xlDelimitedは規定値なので省略しても問題ありません。

今回は、スペース(空白文字)でデータを区切るので、Space:=Trueに設定します。

一連の分割処理が終わったら、Application.DisplayAlerts = Trueで、アラートメッセージを元に戻します。

一見難しそうに思えるセルデータ分割ですが、TextToColumnsメソッドを使うと意外と簡単にできますので、ぜひチャレンジしてみてくださいね!

参考:Excel VBA入門 その68:列幅からはみ出した文字列を下のセルに表示する(Justifyメソッド)




VBAでセルの操作
ブイサバ【Excel VBAサバイバル】~とりあえずここに来れば解決できる~

コメント

  1. […] 参考:Excel VBA入門 その43:セルに入力されているデータを複数の列に分割する方法(TextToColumns) […]

タイトルとURLをコピーしました