• 締切済み

項目内改行があるCSVの書式設定ができません

お世話になります。 現在、Excel2010のVBAを使って、ある項目内に改行CRLFを含むCSVを Excelシートにコピーして加工するマクロを作成しようとしています。 CSV1レコードの例) "001","b","c","d[CR][LF] e[CR][LF] f[CR][LF] g","h" 4項目名に改行が含まれますが、1レコードあたり5項目のCSVです。 CSVをExcelに取り込むには様々な方法があると思いますが、改行を含んでいても正しく取り込める方法として、 現在は下記のようにOpenText関数を使用して読み込みを行い、シートへ貼り付けています。 Workbooks.OpenText fileName:=取り込みたいファイルの名称, StartRow:=1, _ DataType:=xlDelimited, TextQualifier:=xlTextQualifierDoubleQuote, _ ConsecutiveDelimiter:=False, Tab:=False, Semicolon:=False, _ Comma:=True, Space:=False, Other:=False, _ FieldInfo:=Array(Array(1, xlTextFormat), Array(2, xlTextFormat), _ ・・・・・・・・・・・・・・ このとき、CSVの取込自体はできるのですが、FieldInfoで指定した書式指定 (ここでは文字列をあらわすxlTextFormat)が無視されてしまい、 Excelに取り込んだときには文字列でなく標準の書式になっています。 つまり上記の例では1項目目の"001"が桁落ちして1となってしまいます。 ネットで調べたところ、OpenText関数では拡張子csvのファイルを読み込む際には FieldInfo指定が無効となるとありました。そこでファイルの拡張子を.txtに変えてみたところ、 今度は項目内改行が認識されず、行区切りの改行とみなされてしまって、項目取り込みがずれてしまいます。 なんとか、桁落ちせず、なおかつ項目内改行も正しく認識できるような方法はないでしょうか。 OpenText関数以外の方法でもかまいませんので、有識者の方々にご教授いただければ、 と思っております。 よろしくお願いします。

みんなの回答

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

本番データでも確認されたのでしょうか? 当方、きれいな一貫性のある統一されたフォーマットではない場合が ありましてあの時は本当に手こずりました。 ODBCの場合は、OSの32/64bit × Officeの32/64bit の組み合わせに 応じたDSNの変更をする必要がある場合があります。 回答しましたのはOLEDBによるものなので、 その心配は無い筈です。 Excel2007/2010なら問題ないかと思います。2013は未検証です。 ※たまに間違ったことを言いますので鵜呑みにしないでくださいまし。

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.1

E:\TMP フォルダに、SS.CSV があるとして その中身が "001","b","c","d e f g","h" とした時に Sub nnn() Dim cn As Object Dim rs As Object Set cn = CreateObject("ADODB.Connection") With cn .Provider = "Microsoft.ACE.OLEDB.12.0" .ConnectionString = _ "Data Source=E:\TMP;" _ & "Extended Properties='text;HDR=No;" _ & "FMT=Delimited'" .Open End With Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT * FROM [ss.csv]", cn ThisWorkbook.Sheets(1).Range("A1").CopyFromRecordset rs rs.Close: Set rs = Nothing Set cn = Nothing End Sub だと?

hipokin
質問者

お礼

できました。ありがとうございました。 DBのテーブルに見たてて読み込めばいいらしいことは どこかで聞いたことがありましたが、 私が以前見たWEBサイトでは、ODBCデータソースの登録などが 必要と記載されており、 実行するパソコンが変わるたびにODBCの設定が必要なのかと 思っておりました。 教えていただいた方法では、とりあえずExcel2010が通常インストールされていれば、 端末ごとに設定が必要なことは特にないと考えてよろしいでしょうか。

関連するQ&A