プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております
以前と同様 VBAでフォルダ内のファイルを1つのブックに格納(ファイル名=シート名)しておりましたが、1つ問題点が出てきました

UTF-8のファイルが80個近くあり、今までのやり方だと全て文字化けしてしまいます

VBAでどうにかする方法が御座いましたらお知恵を拝借させてください

質問者からの補足コメント

  • http://ur0.biz/49w2
    こちらを参考に作成致しました。

    何故か26行目で
    実行時エラー 3004
    ファイルに書き込めませんでした

    引数1と引数2が同じでも大丈夫とあったのですが、環境とかも有るのでしょうか?

    ウーン難しい・・・

      補足日時:2019/03/15 11:54
  • つらい・・・

    進捗
    sTextにデータが入らず空っぽのデータが作成される
    原因 sText=”” ?
    引数 From=直 To=/sh

    Sub Utf8ToSjis(a_sFrom, a_sTo)
    Dim streamRead As New ADODB.Stream
    Dim streamWrite As New ADODB.Stream
    Dim sText

      補足日時:2019/03/15 16:36
  • つづき


    streamRead.Type = adTypeText
    streamRead.Charset = "UTF-8"
    streamRead.Open
    Call streamRead.LoadFromFile(a_sFrom)
    LFをCRLF処理
    書込
    streamWrite.Type = adTypeText
    streamWrite.Charset = "Shift-JIS"
    streamWrite.Open
    Call streamWrite.WriteText(sText) 書込
    Call streamWrite.SaveToFile(a_sTo, adSaveCreateOverWrite) 保存

      補足日時:2019/03/15 16:36
  • うれしい

    コード差分問題は
    https://detail.chiebukuro.yahoo.co.jp/qa/questio …
    を参照し、フォルダの全ファイル名を持ってくるマクロでループさせてベット保存
    その後通常のマクロでと分けることで無事処理完了しました
    UTF8群の中にSJISがちらほら混ざってそのたびに止まりましたが、若干気持ち悪いながら完成です
    ご助言、ありがとうございました

      補足日時:2019/03/15 18:12

A 回答 (2件)

私が、どの程度、今回は口を挟んで良いのか、わからないのですが、Shift-Jis とUTF-8を判別するプログラムは、一応の完成はしています。

仕組みは、バイナリーで、文字10個程度コードを読む中で、バイナリーの文字区切り信号(名前を知らない)のパターンを読み取り、UTF-8を判別するということです。

ところで、補足で出ていたコードは試してはいないのですが、
Call streamWrite.SaveToFile(a_sTo, adSaveCreateOverWrite)
変換で、上書きして、UTF-8 をShift-JISi にしてしまうのですか?

もともと、Textファイルを、エクセルにインポートすることではなかったではないでしょうか?

それと、コードの中で、
'LFをCRLF処理書込 Replace ...
LF は、Linux/Unix などの改行ですが、それ自体は、ADODB.Stream の中にサポートコマンドがあったはずです。
それから、No.1で、書いた
》UTF-8だけなら、インポートする時に、decoder のプログラムを挟んであげるだけでよいです。
記録をみると、VBAで、変換フィルターは完成していませんでした。

UTF-8 to Shift-JIs 変換インポート自体は出来ています。
あまり手を出し、口出ししすぎると、私のよけいなおせっかいになりかねませんが……。
    • good
    • 0
この回答へのお礼

土日色々と検索してみましたが、出てくるのはVBばかりでした
結局何故UTF8とshiftJISが混ざってるのかもわからずじまいで気持ち悪い感じでした・・・
確か、バイナリエディタか何かで2バイトずらすと読めたりする事も昔あった気がしますが、それを判別するのを自作は今のレベルだと難しい通り越して無理です
幸い1行平文とか見にくいデータでですが、変換は出来たので作業開始しようと思います

お礼日時:2019/03/18 11:42

こんばんは。



この話は、すでに触れていたような気がしますが、2つ確認ですが、
ひとつは、Shift-JIS と混在していますか?
もうひとつは、UTF-8ファイルは、BOM付きでしょうか。

それによって、大幅に話が違ってくると思います。
UTF-8だけなら、インポートする時に、decorder のプログラムを挟んであげるだけでよいです。
ただ、BOM付き(要するに信号)の場合は、その信号の分だけ読み込まないようにしなければなりません。
    • good
    • 0
この回答へのお礼

いつもありがとうございます!
ちょっとそこまで見てなかったですが、500ファイル位がshift-JISで80ファイル程がUTF-8です
BOMはついてなかったと思いますが確認今出来ません
変換のマクロを見つけたので明日試そうかと思った次第ですが、shiftJISも一緒くたにするとあかん言う事ですね・・・危ないとこでした、ありがとうございます

お礼日時:2019/03/14 20:58

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