- ベストアンサー
VBAでCSV内にある改行を取る方法
あるシステムが吐くcsvファイルの項目の中に改行が入っているものがあります。 例) 01,aaa,bbb(改行)bbb,ccc(改行) 02,ddd,eee,fff(改行) 03,ggg(改行)ggg,hhh,iii(改行) このCSVファイルをエクセルのマクロで読み込んでシートに展開したい のですが、項目中にある改行で別レコードを認識してしまいます。 結果) A B C D ---+---+---+--- 01 aaa bbb bbb ccc 02 ddd eee fff 03 ggg ggg hhh iii これを以下のようにしたいのですが・・・ A B C D ---+------+------+---- 01 aaa bbbbbb ccc 02 ddd eee fff 03 gggggg hhh iii どうやればよいでしょうか? ご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
う~ん、わたしならcsvを吐く「あるシステム」の方で、項目内の改 行とレコード終端の改行を区別出来るように設計しますけどね。 なにしろ「あるシステム」が項目内の改行を0x0dに置換してからcsv として吐くようにしてやれば、excelに読み込むだけでセル内改行と して認識するわけだし、違うコードにするとか削除するとかいう場 合もレコード終端と間違う心配がないから、適当なエディタで置換 一発ですよね。 今回の場合、削除すべき改行とレコード終端の改行を区別する基準 は「次の行の最初は数字か文字か」くらいしか思いつきません。VB で処理しようとすると1レコード読むだけで面倒くさいループをグル グル回さないとダメな気がします。Perlなど正規表現で置換の出来 る環境なら一瞬ですけどね。
その他の回答 (2)
- onlyrom
- ベストアンサー率59% (228/384)
こんにちは。 >1レコードの項目数は固定されています であればエクセルに取り込んだあと最終形式にするルーチンを 現在のマクロに追加すればいいのではありませんか? 行頭の項目は必ず、数値、と決まっていればそれを利用してもいいし。 以上です。
お礼
第一項目は数値とは決まっていないのでそれもなかなか難しいとは思いますが、一旦貼り付けてから編集すれば良いんですね。 参考になりました。ありがとうございます。
- DIooggooID
- ベストアンサー率27% (1730/6405)
ご質問に、《質問》して申し訳ございません。 この情報の場合、改行コードでレコードの区切りを判断できないとなると、機械的にレコードとレコードとを区切るための条件は何になりますか? ※無条件に改行コードを外してしまっても、1ファイル、1レコードになってしまいます。 レコードの区切りを示す改行コードは、そのまま残す必要があると思います。
補足
そうなんですよ。一応1レコードの項目数は固定されていますのでそれを手がかり(カンマの数など)にするしかないと思うのですが、その方法も分らずです。 やはり無理でしょうか・・・
お礼
そうですねぇ。 あるシステムは他社のものなので変更が出来ないそうです。 プログラムを全然分っていない担当者でしたのでこのような状況になってしまいました。おかげで困ってます(^^; 早々のご回答ありがとうございました。