この関数について
ExcelVBA(マクロ)でcsvデータを加工するとき、単純にExcelで開いてしまうと「”(ダブルクォーテーション)」が消えてしまったり、数値データの先頭の0が消えたりしてしまいます。そのためテキストデータをシートを介さず変数に取り込み加工をするとデータを破損させずに済みます。また、置換処理程度であれば文字列変数上の操作で足りますが、データをレコードとカラムに分解して、条件によって加工内容を変化させるというような場合は、csvデータを配列に取り込むと操作が楽になります。このページで紹介する関数は、csv形式の文字列を配列に変換します。
関数コピペ ~コードをクリックするだけでコピー完了!~
使い方 ①引数
第1引数:target_str
変換対象のcsv形式の文字列です。
第2引数:row_separater
csv形式の文字列をレコード(行)に分解するときに使用するセパレーター(区切り)文字を指定します。なにもしていしないと改行文字(CrLF)を渡したとみなします。
第3引数:col_separater
csv形式の文字列をカラム(列)に分解するときに使用するセパレーター(区切り)文字を指定します。なにもしていしないと「,(カンマ)」を渡したとみなします。
使い方 ②戻り値
csv形式の文字列を変換した文字列型の配列を返します。なお、データに含まれる「”」は削除してしまうため、配列での操作完了後、csv形式の文字列に戻すときに「”」を復元する必要があります。
サンプルコード(クリックでコピー)
補足:代替手段について
この関数は私がマクロ開発をはじめてすぐ初期の頃~高度成長期の頃まで使用していた関数であり、現在この関数を私はほぼ使用することはありません。この関数はデータに含まれる改行文字や「”」「,」を判定する方法がなくこれらの文字が含まれた項目を持つデータの変換時にはエラーが発生します。事前のデータクレンジングが必須です。現在は代替手段としてADO(ActiveX Data Objects)を使用して私はcsvの読み込み・配列への取り込みを実現しています。この方法については別記事で関数として紹介をします。ほぼ上位互換の機能を持っているため、置き換えをしました。詳細の解説はしませんが、一つだけ差別化できる点あげると、csvデータをデータベースとして扱うADOに対し、文字列として変換をするこの関数は一定規模のデータ操作については、ADOの処理速度を上回ります。
【結果】csv形式の文字列を配列に変換することができました
サンプルコードを実行すると、最初イミディエイトウィンドウにサンプルのcsv形式の文字列を書き出します。その後、配列へ変換し、配列の中身をイミディエイトウィンドウに書き出しています。配列に格納された状態では「”」は削除されている点に気を付けましょう。意図的にデータ内に「”」を持たせたかった場合でも自動で削除してしまいます。
Comment