アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつも楽しく勉強させていただいております。環境はWin7Office2010です。

ExcelVBAからFSOを用いてCSV形式のファイルを読み込み、多少の加工をして最終的にはSQLServerに取り込むという作業をしています。
問題はCSVファイルのことなのですが、どうやらUnicodeでないようでFSOで開くと文字化けしてしまうものがあります。
Excelやワードパッドで開くとちゃんと読めます。
StrConv関数でUnicodeに変換しようとしたのになぜかできませんでした。

今回はファイル数が少なかったので、手作業でワードパッドで開き、保存の形式をUnicodeにして事なきを得ましたが、今後同様のファイルを多数処理しないといけないので手作業での変換は難しいです。

そこで、こんなことは可能でしょうか。



・ExcelVBAで非Unicode形式のファイルを読み、Unicodeで別ファイルに書き出す。

または、

・ExcelVBAでワードパッドなどを制御し、自動的にファイルを開いてUnicodeで保存しなおす。

ついでといっては何ですが、そのファイルの文字コードが何であるかはどうやって分かりますか。
できればVBAを介して調べる方法があれば教えてくださるとうれしいです。

A 回答 (3件)

こちらが楽をさせてもらえそうです。


『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 …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。一番上のURLを参考にプログラムを走らせてみましたが、私を困らせているファイルはutf-8であることが判明しました。
その次のURLですが、出力のサンプルですね。その前に入力で困っているのでちょっと・・・と思いましたが、ADODB.Streamというのをキーワードにこちらのページのコードを参考にしたところ、ちゃんときれいに読めました。感激です。ADODB.Streamというのは初めて使いました。

http://d.hatena.ne.jp/niemands/20090316/1237225383

ところで悲しいことに最後のURLに書いてあることがよくわかりません。エンコードのプログラムなのでしょうか。

お礼日時:2012/08/24 11:18

>そのファイルの文字コードが何であるか


だけ。

ファイルの先頭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:11
    • good
    • 0
この回答へのお礼

回答ありがとうございます。明日職場で試してみます。

お礼日時:2012/08/26 22:05

FSO で ASCII モードで読み込んで、Unicode モードで書き出すだけです。



http://officetanaka.net/excel/vba/filesystemobje …
http://officetanaka.net/excel/vba/filesystemobje …

文字コードを調べるのは結構骨で、以下のような感じです。(但し .NET のサンプル)
http://dobon.net/vb/dotnet/string/detectcode.html
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

教えていただいたサイトを参考に、

Set TextFile = FSO.OpenTextFile("C:\Work\Sample.txt",,0)

と書いてみましたが、やはり文字化けしています。ためしに0を-1や2にしてみましたが、同じでした。

文字コードを調べるのって結構大変なのですね。VB.NETの環境が今はないので、コードを参考にVBAで書き直してみます。

お礼日時:2012/08/23 14:14

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