プロが教えるわが家の防犯対策術!

VBAでCSVをExcelに取り込む時に、途中の改行を取り除くには
はじめて質問させていただきます。
内容はhttp://oshiete.goo.ne.jp/qa/2793590.html のものに似ていまして、あるシステムが吐き出すCSVを、Excelで作ったリストの雛形にVBAで取り込むのですが、CSVの途中で改行されていたりするために上手くいきません。

元のCSV例
111,AAA,aaa,BBBB,bbbb
222,CCC,ccc,DDDD,dddd
333,EEE,eee
,FFFF,ffff
444,GGG,ggg,HHHH,hhhh



取り込んだリスト例
 A | B | C | D | E
──┼──┼──┼──┼──
111 |AAA |aaa |BBBB|bbbb
──┼──┼──┼──┼──
222 |CCC |ccc |DDDD|dddd
──┼──┼──┼──┼──
333 |EEE |eee   |   |
──┼──┼──┼──┼──
    |FFFF|ffff |   |
──┼──┼──┼──┼──
444 |GGG |ggg |HHHH|hhhh

当然の結果なのですが、これを例えばeeeの後ろの改行だけを削除して、333~ffffまで一レコードとして読み込ませたいのです。が、
最後の改行と途中の改行の区別をどうつけさせればいいのか、どの様にしたらいいのか見当がつきません。

とりえあず、
・先頭(A列)には必ず数字が入る
・カンマの数(レコード数?)は固定
・CSV中の余分な改行が入る時と入らない時がある
このあたりが判定の手がかりになると思いますが、厚かましいお願いで恐縮ですが、ヒントになる様なコードをご教授いただけますでしょうか。

何分初心者なもので、情報不足な点ありましたらご指摘下さい。
よろしくお願い致します。

A 回答 (5件)

Excelでやるより、そのCSVファイルをTeraPad等のテキストエディタで改行+「,」を「,」に置換してからExcelで開いた方が手っ取り早いように思います。


それじゃ駄目?
    • good
    • 0

回答番号:No.3 です。

失礼しました。orz

>あるシステムが吐き出すCSVを

>元のCSV例
>:
>333,EEE,eee
>,FFFF,ffff

セル内改行と限らないから

333,EEE,"eee[改行コード]",FFFF,ffff

とダブルクォートで囲まれてるわけじゃないんですね。
ひょっとして[改行コード]も vbLf か vbCrLf かで区別されてるかも判らない?

すみません、勘違いしました。
取り敢えず私のレスは無視しておいてください。

#修行のタビに出ます...orz
    • good
    • 0

データ量が膨大で、CSVファイルを開くのに時間がかかるという状況以外は


Openメソッドで普通に開いてコピー処理したほうが簡単です。



開く時間を短縮したいという事であれば、事前にセル内改行を取り除く方法や、
Line Input読込み時に都度チェックする方法などあります。

前者の事例は
■EXCELにcsv形式の外部データを取り込む際にカンマ区切りで取り込も...
http://oshiete.goo.ne.jp/qa/5972724.html?order=asc
#状況的にはOpenメソッドで充分な案件だったと反省...orz

後者は
『 CSVRead SplitCsv 』
をキーワードにgoogle検索すると
■ダブルクォートのCSVを読み込むには?
http://park7.wakwak.com/~efc21/cgi-bin/exqaloung …
などhitします。参考にしてみてください。
    • good
    • 0

これでうまく行くかどうかデータの規則性の情況に拠るが


Line Inputで1行分を変数に読み込む。
s殿変数に対し、カンマでSplit関数を使い配列に分ける。
要素数が、決まりの5個より少なければ、次のレコードも読んでつなげてみる。
6個以上になる場合があるようだと絶望。か何かルールを設定(6個以上を無視やセルに設定して人間が目視チェックなど)
無いとして、5個の場合は5列のセルにバリアント変数のデータを代入。
1レコードの中のカンマの数を数えることと同様のことをやっている。
Split利用は
例えば
Sub test01()
a = "aa,sdf,gh,j,k"
s = Split(a, ",")
Range("A1:E1") = s
End Sub
のRange("A1:E1") = s
が(1行で)できることがメリット。
    • good
    • 0

CSVを読むのは、テキストファイルとしてOPENしておいて、LINE INPUTですかね?



LINE INPUTで読み取った際に受け取る変数を「次工程」にまわす前に、カンマの数を数える。
・カンマの数が一致するなら、現在の読み取り結果を「次工程」にまわす
・カンマの数が不足するなら、さらにCSV次行を読み、初回の読み取り結果と連結して、カンマの数を数えるところに戻る。
・カンマの数がオーバーするなら、データ異常で打ち切る。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A