目次
分割
今回は A 列に入力されているカンマ( , )区切りの文字列を、 B 列以降に分割して出力するマクロを作成してみました。
マクロの中で Range オブジェクトの「TextToColumns」メソッドを使用しています。
スペース、セミコロン( ; )、円記号( \ )区切りの文字列を分割出力するテストも行ってみました。
題材
題材として以下の画像のようなデータを準備してみました。
a,b,c
a;b;c
a b c
c¥dd¥ff
マクロの一例
「A1」セルに入力されているカンマ区切りの文字を、「B1」の列以降に分割出力するマクロを作成してみました。
「TextToColumns」メソッドの「comma」パラメーターに「true」を指定しています。
Sub カンマ区切りのA1セルの文字列を分割してB1セルに出力()
Dim a As Range
Set a = Range("A1")
a.TextToColumns Destination:=a.Offset(, 1), comma:=True
End Sub
上記マクロを実行してみると、カンマで分割された文字が B1 以降に出力されました。
上記マクロをもう一度実行してみると、以下のメッセージが表示されました。「OK」ボタンを押してみます。
実行結果は一回目の時と同じ内容になりました。
DisplayAlerts
「コピーまたは移動先のセルの内容を置き換えますか?」の確認メッセージが表示されないように「DisplayAlerts = False」の記述を追加してみます。
「B1」セル以降にデータがある状態で続けて実行してみます。
Sub DisplayAlerts追加_カンマ区切りのA1の文字を分割してB1に出力()
Dim a As Range
Set a = Range("A1")
Application.DisplayAlerts = False
a.TextToColumns Destination:=a.Offset(, 1), comma:=True
Application.DisplayAlerts = True
End Sub
上記マクロを実行してみると、確認メッセージが表示されませんでした。
セミコロン(;)
次は「Semicolon」パラメーターに「True」を指定して、セミコロンで分割してみたいと思います。下記マクロを続けて実行してみます。
Sub セミコロン区切りのA2の文字を分割してB2に出力()
Dim a As Range
Set a = Range("A2")
Application.DisplayAlerts = False
a.TextToColumns Destination:=a.Offset(, 1), Semicolon:=True
Application.DisplayAlerts = True
End Sub
上記マクロを実行してみると、「B2」セル以降に文字が出力されました。
スペース
「Space:=True」としてスペースで分割してみます。下記マクロを続けて実行してみます。
Sub スペース区切りのA3の文字を分割してB3に出力()
Dim a As Range
Set a = Range("A3")
Application.DisplayAlerts = False
a.TextToColumns Destination:=a.Offset(, 1), Space:=True
Application.DisplayAlerts = True
End Sub
上記マクロを実行してみると、「B3」セル以降に文字が出力されました。
円記号(¥)
円記号での分割もテストしてみました。指定の文字で分割する場合は、「Other」パラメーターに「True」を指定した上で、「OtherChar」パラメーターに区切り文字を指定するようです。
Sub 円記号を区切り文字として使用()
Dim a As Range
Set a = Range("A4")
Application.DisplayAlerts = False
a.TextToColumns Destination:=a.Offset(, 1), Other:=True, OtherChar:="¥"
Application.DisplayAlerts = True
End Sub
上記マクロを実行してみると、「B4」セルから右に文字が出力されました。
エラー発生
空白セルの文字列を分割しようとした場合、エラーが発生するようです。下記マクロを続けて実行してみます。「A5」セルは空白の状態です。
Sub 元文字列が空白の場合()
Dim a As Range
Set a = Range("A5") '空白セル
Application.DisplayAlerts = False
a.TextToColumns Destination:=a.Offset(, 1), comma:=True
Application.DisplayAlerts = True
End Sub
上記マクロを実行してみると、エラーが発生しました。
複数セル
元データが 1 列で複数行の場合も試してみました。まずは、下記マクロで元データを増やしてみます。
Sub 元データを増やす()
Range("a5:a7") = WorksheetFunction.Transpose(Array("a,b,c", "d,e,f", "g,h,i"))
End Sub
上記マクロを実行してみると、「A5:A7」の範囲にデータが追加されました。
続けて元データが複数行になっている下記マクロを実行してみます。出力先は左上の「B5」セルのみを指定しています。
Sub 元データが1列で複数行の場合()
Dim a As Range
Set a = Range("A5:A7")
a.TextToColumns Destination:=Range("B5"), comma:=True
End Sub
上記マクロを実行してみると、「A5:A7」の範囲の文字列が分割出力されました。
テスト環境
- Windows 10(64 ビット)
- Microsoft Office Excel 2003
以上、閲覧ありがとうございました。