いつも楽しく勉強させていただいております。環境はWin7Office2010です。
ExcelVBAからFSOを用いてCSV形式のファイルを読み込み、多少の加工をして最終的にはSQLServerに取り込むという作業をしています。
問題はCSVファイルのことなのですが、どうやらUnicodeでないようでFSOで開くと文字化けしてしまうものがあります。
Excelやワードパッドで開くとちゃんと読めます。
StrConv関数でUnicodeに変換しようとしたのになぜかできませんでした。
今回はファイル数が少なかったので、手作業でワードパッドで開き、保存の形式をUnicodeにして事なきを得ましたが、今後同様のファイルを多数処理しないといけないので手作業での変換は難しいです。
そこで、こんなことは可能でしょうか。
・ExcelVBAで非Unicode形式のファイルを読み、Unicodeで別ファイルに書き出す。
または、
・ExcelVBAでワードパッドなどを制御し、自動的にファイルを開いてUnicodeで保存しなおす。
ついでといっては何ですが、そのファイルの文字コードが何であるかはどうやって分かりますか。
できればVBAを介して調べる方法があれば教えてくださるとうれしいです。
No.2ベストアンサー
- 回答日時:
こちらが楽をさせてもらえそうです。
『VBAで、テキストファイルの文字コードを自動判定します。』
http://scripting.cocolog-nifty.com/blog/2007/02/ …
文字コードの変換は、ADODB.Stream とかでも。
http://oshiete.goo.ne.jp/qa/7557074.html
(fS の宣言を忘れてました。。Object にてお願い)
なお、レジストリの、HKEY_CLASSES_ROOT\MIME\Database\Charset を覗いてみると・・
http://www.atmarkit.co.jp/fdotnet/dotnettips/013 …
回答ありがとうございます。一番上のURLを参考にプログラムを走らせてみましたが、私を困らせているファイルはutf-8であることが判明しました。
その次のURLですが、出力のサンプルですね。その前に入力で困っているのでちょっと・・・と思いましたが、ADODB.Streamというのをキーワードにこちらのページのコードを参考にしたところ、ちゃんときれいに読めました。感激です。ADODB.Streamというのは初めて使いました。
http://d.hatena.ne.jp/niemands/20090316/1237225383
ところで悲しいことに最後のURLに書いてあることがよくわかりません。エンコードのプログラムなのでしょうか。
No.3
- 回答日時:
>そのファイルの文字コードが何であるか
だけ。
ファイルの先頭3バイトが、8145BFなら、UTF-8
ファイルの先頭2バイトが、FFFEなら、Unicode
とメモ帳では見分けているはずです。
もちろん必ずそうなっているとは限りませんが、そうなっていないとメモ帳で開くと文字化けするはず。
なお、FSOでこの先頭の文字を取得できたかどうかは不明。
⇒試してみてもらえばいいかと。
open "FILENAME" for input as #1
input #1,A
?hex(asc(mid(A,1,1)))
とすると 8145
?hex(asc(mid(A,2,1)))
とすると BF
?hex(asc(mid(A,3,1)))
以後はファイル中の文字列のコードが順に
でてきます。
み終わったらcloseしておいてください。
この回答への補足
さっそく読めないファイルで試してみました。おっしゃる通りに動きましたよ!皆様のおかげで問題は解決しました。本当にありがとうございます。
補足日時:2012/08/27 10:11No.1
- 回答日時:
FSO で ASCII モードで読み込んで、Unicode モードで書き出すだけです。
http://officetanaka.net/excel/vba/filesystemobje …
http://officetanaka.net/excel/vba/filesystemobje …
文字コードを調べるのは結構骨で、以下のような感じです。(但し .NET のサンプル)
http://dobon.net/vb/dotnet/string/detectcode.html
回答ありがとうございます。
教えていただいたサイトを参考に、
Set TextFile = FSO.OpenTextFile("C:\Work\Sample.txt",,0)
と書いてみましたが、やはり文字化けしています。ためしに0を-1や2にしてみましたが、同じでした。
文字コードを調べるのって結構大変なのですね。VB.NETの環境が今はないので、コードを参考にVBAで書き直してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- 画像編集・動画編集・音楽編集 inkscapeで作成した図の保存の仕方とその保存したファイルの編集の仕方 1 2022/09/22 09:33
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- HTML・CSS CSSファイルの日本語コメントが文字化けしてしまう 3 2022/12/26 15:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
SGファイルって何ですか?
-
CSVファイルへの保存の際、デー...
-
「VBScript」ADODB.Streamにお...
-
マウスポインタの変更
-
分割コンパイルの#defineについて
-
バッチで118項目のCSVを処理し...
-
[VBScript]ファイルの入出力を...
-
VB6でのファイル作成方法
-
VBに、Cのincludeのようなもの...
-
大きいサイズのテキストファイ...
-
fopenできる上限の変更
-
同じ名前のファイルを作った場...
-
■ 移植性のないポインタ変換に...
-
プログラムで文字をBMPファイル...
-
C言語のfopenについて教えてく...
-
CSVファイル
-
Javascript で INI の読み書き
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
ファイルを記録してあるセクタ...
-
テキストファイルの最終行を削...
-
SGファイルって何ですか?
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
グローバル変数のよくない使い...
-
ファイルの結合
-
大きいサイズのテキストファイ...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
ハッシュの計算時間について
-
C言語のfopenについて教えてく...
-
Javascript で INI の読み書き
-
Excelマクロでの再読込み方法
おすすめ情報