お世話になります。
現在、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関数以外の方法でもかまいませんので、有識者の方々にご教授いただければ、
と思っております。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
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
だと?
できました。ありがとうございました。
DBのテーブルに見たてて読み込めばいいらしいことは
どこかで聞いたことがありましたが、
私が以前見たWEBサイトでは、ODBCデータソースの登録などが
必要と記載されており、
実行するパソコンが変わるたびにODBCの設定が必要なのかと
思っておりました。
教えていただいた方法では、とりあえずExcel2010が通常インストールされていれば、
端末ごとに設定が必要なことは特にないと考えてよろしいでしょうか。
No.2
- 回答日時:
本番データでも確認されたのでしょうか?
当方、きれいな一貫性のある統一されたフォーマットではない場合が
ありましてあの時は本当に手こずりました。
ODBCの場合は、OSの32/64bit × Officeの32/64bit の組み合わせに
応じたDSNの変更をする必要がある場合があります。
回答しましたのはOLEDBによるものなので、
その心配は無い筈です。
Excel2007/2010なら問題ないかと思います。2013は未検証です。
※たまに間違ったことを言いますので鵜呑みにしないでくださいまし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- XML エクセルのマクロについて教えてください。 3 2023/02/06 09:06
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/06 13:01
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/04 12:47
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/04 14:20
- Excel(エクセル) PowerQueryで行数の指定はできますか? 2 2022/08/26 11:13
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エスケープ文字の復帰(¥r)と...
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
C++で空Enterの入力を判...
-
Excel VBAからBeckyを起動して...
-
JAVA System.out.println の ...
-
POSTで改行コードを受け渡すには
-
改行を読み飛ばす
-
jsp 改行コードで改行させて表...
-
C++でのCRLFについて
-
テキストファイルから改行コー...
-
【VBA】エクセルで最後の不要な...
-
リッチエディットコントロール...
-
Excel VBS、ADODB.Streamで改行
-
ExcelVBAでメールを作成してメ...
-
テキストボックス行の桁数を制...
-
ファイルから読み取った改行文...
-
textarea , PHP, 確認画面 改行
-
変数の中の改行コードをBRタグ...
-
正規表現の置き換えを使って。...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのコマンドボタンの文字列の...
-
ソースコードの1行が長いとき...
-
エスケープ文字の復帰(¥r)と...
-
ファイルから読み取った改行文...
-
JAVA System.out.println の ...
-
C++で空Enterの入力を判...
-
COBOLの改行
-
テキストファイルから改行コー...
-
改行について
-
【VBA】エクセルで最後の不要な...
-
1行ごとに取得して、その改行...
-
jsp 改行コードで改行させて表...
-
VBAでCSVをExcelに取り込む時に...
-
エクセルVBA 文字列領域が不足...
-
最終行の改行について
-
改行を読み飛ばす
-
コンボボックスの項目中に改行を
-
ExcelVBAでメールを作成してメ...
-
テキストボックス行の桁数を制...
-
JavaMail,本文中の改行について
おすすめ情報