目次

分割

今回は A 列に入力されているカンマ( , )区切りの文字列を、 B 列以降に分割して出力するマクロを作成してみました。

マクロの中で Range オブジェクトの「TextToColumns」メソッドを使用しています。

スペース、セミコロン( ; )、円記号( \ )区切りの文字列を分割出力するテストも行ってみました。

「a,b,c」が「a」「b」「c」に分割されている。
「a,b,c」が「a」「b」「c」に分割されている。

目次まで戻る

題材

題材として以下の画像のようなデータを準備してみました。

「A1:A4」にカンマ( , )、セミコロン( ; )、スペース、円記号( ¥ )区切りの文字が入力されている。
「A1:A4」にカンマ( , )、セミコロン( ; )、スペース、円記号( ¥ )区切りの文字が入力されている。
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 以降に出力されました。

「comma」パラメーターに「True」を指定した時の実行結果です。
「comma」パラメーターに「True」を指定した時の実行結果です。

上記マクロをもう一度実行してみると、以下のメッセージが表示されました。「OK」ボタンを押してみます。

コピーまたは移動先のセルの内容を置き換えますか?「OK」「キャンセル」
コピーまたは移動先のセルの内容を置き換えますか?「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

上記マクロを実行してみると、確認メッセージが表示されませんでした。

「Application.DisplayAlerts = False」を追加したマクロの実行結果です。
「Application.DisplayAlerts = False」を追加したマクロの実行結果です。

目次まで戻る

セミコロン(;)

次は「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」セル以降に文字が出力されました。

「Semicolon:=True」と指定した時の実行結果です。
「Semicolon:=True」と指定した時の実行結果です。

目次まで戻る

スペース

「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」セル以降に文字が出力されました。

「Space:=True」を指定した時の実行結果です。
「Space:=True」を指定した時の実行結果です。

目次まで戻る

円記号(¥)

円記号での分割もテストしてみました。指定の文字で分割する場合は、「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」セルから右に文字が出力されました。

「Other:=True」「OtherChar:="¥"」とした場合の実行結果です。
「Other:=True」「OtherChar:="¥"」とした場合の実行結果です。

目次まで戻る

エラー発生

空白セルの文字列を分割しようとした場合、エラーが発生するようです。下記マクロを続けて実行してみます。「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

上記マクロを実行してみると、エラーが発生しました。

実行時エラー'1004' データが選択されていません。
実行時エラー'1004' データが選択されていません。

目次まで戻る

複数セル

元データが 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」の範囲の文字列が分割出力されました。

元データが 1 列複数行の場合の実行結果です。
元データが 1 列複数行の場合の実行結果です。

目次まで戻る

テスト環境

  • Windows 10(64 ビット)
  • Microsoft Office Excel 2003

以上、閲覧ありがとうございました。

目次まで戻る

同じカテゴリの投稿(Excel VBA)

前後の投稿