【VBA】FSOのTextStreamでUTF-8が文字化け?「絶望」を「自動化」に変える解決策

【業務効率化】VBA
スポンサーリンク

「あぁ、また文字化けしてる…」

職場で、システムからダウンロードしたCSVファイルを開いた瞬間、画面に並ぶ謎の記号。上司からは「これ、今日中に集計しておいて」と頼まれ、手作業で1つずつ「名前を付けて保存」から文字コードを変える作業。気づけば時計の針は1時間進んでいる……。

そんな経験はありませんか?

実は、VBAの定番ツールである「FSO(FileSystemObject)」のTextStreamは非常に便利である反面、現代の標準規格である「UTF-8」形式の読み書きが苦手という弱点があります。

私も入社1年目の頃、これを知らずに「コードは合ってるはずなのに、なぜ!?」と3時間ほどモニターの前で悪戦苦闘した経験があります。

でも、大丈夫です。この記事を読めば、その壁をたった数分で突破できるようになります。

【業務効率化】VBAの記事を見る 

FSOの「限界」を知る

FSOのOpenTextFileメソッドは、直感的にファイルを操作できる上に処理も高速です。
しかし、この方法で正常に扱えるのは、基本的には「Shift-JIS」か「Unicode(UTF-16)」のみとなります。

現代のWebシステムやクラウドサービスから出力されるデータは、その多くが「UTF-8」形式を採用しています。

これをFSOで無理やり開こうとするのは、「日本語しか話せない人に、アラビア語の小説を読ませる」ようなもの。当然、意味不明な記号(文字化け)が出てくるわけです。

壁を壊す秘密兵器「ADODB.Stream」

それなら、VBAでUTF-8を扱うのは諦めるしかないのか……」と言えば、決してそんなことはありません。

代わりに「ADODB.Stream」という標準オブジェクトを使います。これは、さまざまな文字コードを自在に相互変換できる「万能な翻訳機」のような存在になります。

コピペで動く!UTF-8対応テンプレート

以下のコードをVBAのエディタに貼り付けてみてください。
特別な事前準備(参照設定)なしでも動く「後期バインディング」方式で書いています。

Sub ReadWriteUTF8()
    ' --- 変数の準備 ---
    Dim reader As Object
    Dim writer As Object
    Dim textContent As String
    Dim inputPath As String
    Dim outputPath As String

    ' ファイルパスを指定(自分の環境に合わせて変えてください)
    inputPath = "C:\temp\input_utf8.csv"
    outputPath = "C:\temp\output_utf8.txt"

    ' --- 1. UTF-8ファイルを読み込む ---
    Set reader = CreateObject("ADODB.Stream")
    With reader
        .Type = 2            ' テキスト形式を指定
        .Charset = "UTF-8"   'UTF-8を指定
        .Open
        .LoadFromFile inputPath
        textContent = .ReadText  ' 中身をまるごと変数に入れる
        .Close
    End With

    ' --- 2. 読み込んだデータを少し加工(例:文末に追記) ---
    textContent = textContent & vbCrLf & "【処理完了】" & Now

    ' --- 3. UTF-8ファイルとして書き出す ---
    Set writer = CreateObject("ADODB.Stream")
    With writer
        .Type = 2
        .Charset = "UTF-8"
        .Open
        .WriteText textContent
        .SaveToFile outputPath, 2 ' 2は「上書き保存」
        .Close
    End With

    MsgBox "作業が終わりました!"
End Sub

最後に

今回紹介したように、VBAのツールやオブジェクトにはそれぞれ「得意・不得意」があります。

実務の現場ではこうした「最適な道具を選ぶ知識」があるかどうかが、定時で帰宅できるか、深夜まで残るかの分かれ道になります。私自身も昔は失敗の連続でしたが、ひとつずつ適切な「道具」の扱い方を覚えることで、今では定時退社が当たり前の日常になりました。

一緒にがんばっていきましょう!

【業務効率化】VBAの記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました