以下のようなデータがあった場合に
“○○○○○”,”○○○,○○”,”○○○○○”
区切り文字をカンマで分割すると
配列(0) → “○○○○○”
配列(1) → “○○○
配列(2) → ○○”
配列(3) → “○○○○○”
というデータが出来上がってしまいます。
どうすれば綺麗に分割できるのでしょうか?
この記事では以下の方法を知ることができます。
データの中にカンマが入っているCSVファイルを綺麗に分割する方法。
サンプルコード
以下はデータの中にカンマが入っている場合にも綺麗に分割するコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub sample() ' 読み込むテキストファイルのパスを指定します Open "C:\Sample\Sample.csv" For Input As #1 ' 読み込み先Excelの行番号 Dim row_num As Long: row_num = 1 ' ファイルの終端まで繰り返し処理 Do While Not EOF(1) ' ファイルを1行読み込みbufに入れます Line Input #1, buf ' 「","」の文字列を「"|"」に置換する buf_replace = Replace(buf, """,""", """|""") ' CSVファイルを「|」で分割し配列に入れます dataArr = Split(buf_replace, "|") ' カンマで分割された数の分だけ列方向繰り返す For i = 0 To UBound(dataArr) ' 読み込んだ値をExcelに書込みます Cells(row_num, i + 1).Value = dataArr(i) Next ' 行番号を更新します row_num = row_num + 1 Loop ' 読み込んだファイルを閉じます Close #1 End Sub |
ポイントとなる技術
区切り文字を別の文字に置換する
Replace関数を使用し、区切り文字であるカンマを別の文字列に置換します。
buf_replace = Replace(buf, “検索する文字列”, “置換後の文字列”)
公式の説明:開始位置から始まる文字列式の部分文字列である文字列 (既定値は 1) を返します。この文字列では、指定した部分文字列が指定した回数別の部分文字列に置き換えられます。
この関数を使用して分割文字列を置換します。
,(カンマ)を |(パイプ)に置換する
Replace関数により ,(カンマ)を |(パイプ)に置換し、分割文字列を |(パイプ)にします。
buf_replace = Replace(buf, ““”,””“, ““”|””“)
※ ,(カンマ)のみを検索するのではなく、両サイドの “(ダブルクォーテーション)を合わせて指定するのがポイントです。
なぜなら ,(カンマ)のみを指定すると、データの中のカンマまで |(パイプ)に置換されてしまうからです。今回はあくまでも、分割文字列を ,(カンマ)から |(パイプ)に置換していので “,” を検索文字列に指定します。
“○○○○○”,”○○○,○○”,”○○○○○”
↓
“○○○○○”|”○○○,○○”|”○○○○○”
このように置換します。
|(パイプ)を分割文字列に指定する。
Split関数を使用し、|(パイプ)で分割します。
Split(“分割したい文字列”, “|”)
公式の説明:指定された数のサブ文字列が含まれる 0 ベースの 1 次元配列を返します。
Split関数の第1引数に、分割したい文字列を指定します。
Split関数の第2引数に、どの文字列で分割するかを指定します。今回は |(パイプ)を指定します。
実行結果
では以下のCSVファイルを読み込んで実行してみましょう。
普通にカンマで分割した結果と、今回のように置換して分割した結果を比較してみましょう。

カンマで分割した結果

カンマの位置で分割されているため、ずれてしまいました。
では、今回のプログラムで再度実行してみましょう。
置換してパイプで分割した結果
きちんと区切り位置で分割されています。
まとめ
今回は、CSVファイルのデータの中に ,(カンマ)が入っている場合の対処ほうをご紹介しました。
・ CSVファイルのデータにカンマが入っている場合は “,” を “|” に置換し | で分割する。
もしよろしかったら、ご参考にしてください。
ではまた。
コメント