セルに入力されている氏名などのデータを複数の列に分割するには、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メソッド)
コメント
[…] 参考:Excel VBA入門 その43:セルに入力されているデータを複数の列に分割する方法(TextToColumns) […]