
EXCEL VBAでのCSVファイル読み込み、出力で困っています。
データ3件のファイルから3件抽出すると正常にイミディエイトウィンドウへ表示されるのですが
データ約38,000件のファイルから3件抽出すると文字化けする項目があるのです。
文字化けする項目の共通点は256文字以降が、どうやら化けているようです。(長文1、長文2の項目)
教えて!goo でいろいろ探してみましたが、これといった解決策が見つかりませんでした。
また、抽出データをCSVで出力しているのですが
始まりと終わりに " が出力されるので困っています。
" が出力されないようにできるのでしょうか?
当方、COBOLでのコーディング経験は実務で4年ほどありますが
VBAの知識は学校で少し学んだ程度の初心者です。
わかりやすく教えていただけないでしょうか?
sample1.csv データ3件
sample2.csv データ約38,000件(ここにsample1.csvと同じデータが含まれています)
Dim adoCON As New ADODB.Connection
Dim adoRS As New ADODB.Recordset
Dim rec As String
'ADOを使い読み込み専用モードでCSVファイルを扱う準備(オープン)をします
adoCON.Open "Driver={Microsoft Text Driver (*.txt; *.csv)}; " & _
"DBQ=c:\Documents and Settings\デスクトップ\test;" & _
"ReadOnly=1"
Open "C:\Documents and Settings\デスクトップ\test\test.csv" For Output As #1
'SQLを実行し、指定したIDのデータを抽出します
'ID,名前,,,,,,,,,,,長文1,長文2,,,,,,更新日時 ←こんな感じで20項目
Set adoRS = adoCON.Execute("select * from sample1.csv where (ID = 213428) or (ID = 212717) or (ID = 212917)")
'SQLの実行結果をデータが無くなるまでrecへ格納します
Do Until adoRS.EOF = True
rec = rec & adoRS("ID") & "," & adoRS("名前") & "," & adoRS("長文1") & "," & adoRS("長文2") & Chr(10)
'カーソルを次の行へ
adoRS.MoveNext
Loop
'recの内容をイミディエイトウィンドウへ表示
Debug.Print rec
'recの内容を出力
Write #1, rec
'CSVファイルをクローズします
Close #1
'レコードセットをクローズします
adoRS.Close
'データベースのクローズ
adoCON.Close
No.2ベストアンサー
- 回答日時:
フィールドの型が自動判定されるため、
テキスト型で256文字以上が切り捨てられているのでしょう。
http://oshiete.goo.ne.jp/qa/5996792.html
>..schema.iniファイルを作成して対処したほうが良いかと思います。
>256文字以上の文字列を含む列をMemo型で指定します。
>始まりと終わりに " が出力されるので困っています。
[Write#ステートメント]を使ってるからでしょう。
ヘルプで確認してみてください。
>..文字列は、ダブル クォーテーション ("") で囲んで出力します。
提示内容であれば、[Print#ステートメント]で良さそうですが。
http://oshiete.goo.ne.jp/qa/5996792.html
あっ、このページ、何度か見ました!
end-uさんが回答されてたんですね。
iniファイルって初心者には何だか難しそうだなぁ
と思ってよく読んでいませんでした。
ここに質問した後いろいろ調べた結果、勇気をもって
iniファイルを作ってみたら非常に簡単でした!
しかし、参考サイトにはChar型についてしか書かれていなくて。
Memo型だったんですね!おかげで解決できました! ありがとうございます!!
出力内容もPrint #1 で思った通りの出力ができました!
VBAの勉強中ですので、また質問させていただくことがあると思います。
どうぞ、よろしくお願いします。
No.3
- 回答日時:
同じコードとは言えませんが、こちらで試してみましたが、おそらく根本的な違いはありませんから、問題ないはずです。
CSVの項目の中のひとつに、550文字を入れてみましたが、特に、文字化け等は発生しませんが、フィールドのデフォルトは255になっていますね。
rs(field).DefinedSize
それを一旦、SQL で読んで、rs に入れてみましたが広がります。
出力の test.csv 側で、文字化けしているということですか?
一般的な話なのですが、CSV が、いわゆる本物のCSVでなく、途中で、見えない区切り信号が入っている可能性があります。私は、どうも、見かけ上のCSV の気がしてならないのですが。
それと、もしダメなら、スピードは、遅いかもしれませんが、
Open "C:\Documents and Settings\デスクトップ\test\test.csv" For Output As #1
で出力しているなら、インポート側も Open ステートメントを使用したらいかがでしょうか。
一旦、配列(Split textline, ",") に入れて、そこで、検索してヒットさせる方法もあります。ただし、本物のテキストファイルでないと、以下はうまく行かないはずです。
Open "C:\Documents and Settings\デスクトップ\test\sample1.csv" For Input As #1
例えば、Binary Access を利用します。
FileName ="C:\Documents and Settings\デスクトップ\test\sample1.csv"
Open FileName For Binary Access Read As #1
>また、抽出データをCSVで出力しているのですが
>始まりと終わりに " が出力されるので困っています。
>" が出力されないようにできるのでしょうか
例:
buf = Mid(adoRS("長文1"),2, Len(adoRS("長文1")-2)
お忙しい中、回答ありがとうございます。
おかげさまで、文字化けはiniファイルを作ることで解決しました。
出力内容もPrint #1 で思った通りの出力ができました。
VBAの勉強中ですので、また質問させていただくことがあると思います。
どうぞ、よろしくお願いします。
No.1
- 回答日時:
(1) Excel のバージョンは何ですか?
(2) CSV への出力をVBAのWrite文でなさっていますが、
Workbook.SaveAs メソッドで FileFormat:=xlCSV としても
イケルはずですが、試されましたか?
" で囲む件はこれで解決するかもしれません。
(3) 読み出した情報を全部ひとつの文字列変数に格納してから出力されていますが
1レコード毎に出力していってはマズイ理由はありますか?
文字化けの理由はこれかもしれません。お試し下さい。
(4) 余談ですが、どうしてもVBAでファイル出力するなら
Print #1 文の方が扱いやすいかもしれません。
(1)記載を忘れていました。すみません。 2003 SP3です。
(2)出力方法がいろいろあることは知っていたのですが、
write の方が馴染み深かったので使用しました。出力できれば何でもOKです。
(3)これは試しました。変わらず文字化けしてました。
(4)Print #1 で思った通りの出力ができました! ありがとうございます!!
文字化けの件はiniファイルを作ることで解決しました。回答ありがとうございました。
VBAの勉強中ですので、また質問させていただくことがあると思います。
どうぞ、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) マクロを教えてください。 7 2023/06/01 19:47
- Access(アクセス) access,vbaでフォルダ内のファイルをテーブルにインポート、ファイル名もフィールドに追加したい 1 2022/08/31 11:11
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- その他(プログラミング・Web制作) データ解析ソフトRでのファイル入力read.csvがエラーになります 7 2022/03/27 22:11
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
クエリー出力からEXCELに吐き出...
-
CSVファイルの時刻の形式について
-
ファイル出力
-
ダウンロードして印刷
-
accessでクエリをExcelにエクス...
-
テキストファイルをエクセルで...
-
Microsoft Outlookで、vCardを...
-
標準出力、標準エラー出力 以...
-
ACCESS エクスポート ダイアロ...
-
プロフィールビデオ作成につい...
-
COBOLについて
-
ZIPファイルダウンロードに...
-
パスワード設定のタグについて
-
excelからtextへ変換する際の出...
-
受信メールを一括してテキスト...
-
ファイルを取得するC#のプロ...
-
テキストファイルについてのプ...
-
テキストファイルを検索・編集...
-
アクロバットの保存の禁止
-
テキストファイルを読み込んで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
accessでクエリをExcelにエクス...
-
CSVファイルの時刻の形式について
-
コマンドプロンプトのテキスト...
-
Thunderbird 受信メールからの...
-
COBOL、項目末尾に空白がある場...
-
Acrobat参照設定
-
エクセルVBAでMHTMLで保存したW...
-
accessのリポートを、excelに出...
-
AccessのレポートからPDFをペー...
-
Excel で「OLE は現在使用でき...
-
エクセルが裏で動いたままなん...
-
CSV形式で保存するとファイ...
-
“ファイルに出力”した印刷ファ...
-
ファイナルカットで編集した動...
-
ショートカットで起動した場合...
-
PHP:unzipコマンドにおけるエ...
-
TransferSpreadsheetでフルパス...
-
EXCEL VBAでのCSVファイル読み...
-
MDI形式のファイルから文字をき...
-
指定されたファイルの関数名・...
おすすめ情報