見出し画像

CSVデータの特殊文字について

ITサポーターTsuchidaの土田です。久々のExcelVBAについて書いてみます。

CSVファイルの読み込みをして、Excelで必要な項目だけを抜き出す処理というのが、ExcelVBAで最も得意としている処理です。私もこの処理をよく作りました。ExcelVBAにはSplit関数が用意されていて、Split(csvの1行, ",")とすると、Split関数によってcsvの1行のテキストデータが、カンマを区切りに配列に分けて出力してくれます。配列に分けられてテキストを、必要な配列の番号を指定してセルに代入するだけで、Excelの表に値が入るのです。

ところが、最近のCSVファイルの中に、備考やコメントのような長文のテキストが入っていることがあります。この長文テキストの中にカンマの文字があると、Split関数が長文テキストのカンマでも配列が分かれてしまいます。Split関数の仕様なのでテキストの中にカンマがある場合は、Split関数は使えないのです。

Split関数を使わない場合は、CSVの1行の1文字ずつ判定を文字数分繰り返す必要があります。ちょっと面倒な処理になります。
ITサポーターTsuchidaのサイトでサンプルを紹介しているので、具体的な処理はサンプルを参照ください。

CSVの中の特殊文字

特殊文字の代表として、カンマ(,)・ダブルクォーテーション(")・改行があります。この3つについて知っておく必要があります。

カンマ

カンマは、CSVの項目を区切る文字なので、一般的にカンマが来たら別の配列や別のセルに編集します。ただし、長文テキストの中にはカンマのテキストが入っていることがあります。長文テキストにカンマが入る可能性があると、Split関数は使えません。

長文テキストの場合にはテキストの前後にダブルクォーテーションで括られています。そこでダブルクォーテーションを数えて、ダブルクォーテーションが奇数だったらダブルクォーテーション内のカンマとして、偶数だったらダブルクォーテーション外のカンマとして区切り文字の扱いにします。

私の印象では最近ECサイトのCSVデータにはカンマが含まれる長文テキストは意外と存在しますので、CSVデータに長文テキストがある場合は、カンマはテキストにも入っていることを想定した方がいいでしょう。

ダブルクォーテーション

ダブルクォーテーションは引用符と呼ばれて、この文字はデータではなく、文字列の前後につくものなので、ダブルクォーテーション内にはどんな特殊文字でも入ります。カンマだけではなく、タブや改行も入ってきます。

Excel内で使用する場合は、ダブルクォーテーションは不要なのでReplace関数で取り除くこともできます。

改行コード

改行コードには、Windowsで使う改行コードとUnix・Macで使う改行コードがあります。CSVファイルはテキストデータなので、FTPを転送モードがASCIIモードならOSの違いの改行コードを変換してくれますが、Binaryモードだと改行コードだと変換してくれません。

ちなみにWindowsだと改行コードはCRLFで2バイトですが、Unix・MacではLFの1バイトなのです。WEBサイトからダウンロードしたCSVファイルがASCIIモードなら問題ないのですが、Binaryモードだと厄介なことになります。

WiondowsのExcelVBAでは、CSVファイルを1行ずつ読むときに、Line Inputで読むのですが、改行コードがLFだとLine Inputだと一度に全行読まれてしまいます。改行コードがCRLFでもLFでもあり得る場合は、CSVファイルを別のモードで開く必要があります。開き方を紹介しているサイトがありますので、ネットで検索してみてください。

私がPCを使い始めた頃って、OSで改行コードや漢字コードが違うものだと思って意識するのですが、WEBの普及でMacがUnixに寄せてきたので、Windowsがだんだん仲間外れ感があります。Windowsの地域の設定が日本だと、テキストファイルの漢字コードがシフトJISだったりします。

特殊文字の中で改行コードが一番厄介ではありますが、コンピュータを使う側として仕事をする場合は改行コードは常に意識が必要になります。コンピュータに使われる側としてユーザの立場なら意識しなくてもいいかと思います。

この記事が気に入ったらサポートをしてみませんか?