【入門編】【文字コード一括変換】特定フォルダ配下の全テキストファイルを対象とした Shift-JIS と UTF-8 のバッチ変換処理 – VBScript (Visual Basic Scripting Edition)解析バイブル

スポンサーリンク

VBScriptで業務を自動化せよ:文字コード一括変換ツールで学ぶ「エンジニアの作法」

こんにちは。現場で泥臭く、しかし誰よりもスマートに自動化を推し進めてきたエンジニアです。

今日は、VBScriptを使って「フォルダ内の全テキストファイルをShift-JISからUTF-8へ一括変換する」という、実務で必ずと言っていいほど直面する課題を攻略します。

「マクロの記録」で生成されたコードをただ動かすだけの段階から、一歩先へ進みましょう。VBScriptの心臓部である `ADODB.Stream` を正しく操り、Windows環境の裏側を支配する感覚を掴んでください。

なぜVBScriptなのか?

現代ではPythonなどが主流ですが、VBScriptには「インストール不要で、Windowsがあればどこでも動く」という圧倒的なポテンシャルがあります。社内のセキュリティポリシーで環境構築が難しい現場でも、VBScriptさえあれば即座に業務効率化の魔法をかけられるのです。

今回の武器:ADODB.Streamを理解する

文字コード変換のキモは、Windowsが隠し持っているデータ操作オブジェクト `ADODB.Stream` です。これは、ファイルを「ただの文字列」ではなく、「バイナリの塊(ストリーム)」として扱い、文字コードを変換しながら読み書きする強力なツールです。

陥りやすい罠:文字化けとファイルロック

  • バイナリの扱い: テキストを読み込む際、 `Charset` プロパティを明示しないと、OSは標準のコードページで無理やり解釈しようとします。ここが文字化けの主原因です。
  • ファイルロック: 処理が終わった後に `objStream.Close` を忘れると、ファイルがロックされたままになり、他のアプリが使えなくなります。「開いたら閉じる」。これがエンジニアの鉄則です。

【実戦コード】UTF-8一括変換スクリプト

以下のコードをテキストエディタに貼り付け、`.vbs` という拡張子で保存してください。

‘ — 文字コード変換バッチスクリプト —
Option Explicit

Dim fso, targetFolder
Set fso = CreateObject(“Scripting.FileSystemObject”)

‘ 変換したいフォルダを指定
targetFolder = “C:\Your\Target\Folder”

‘ 再帰的にフォルダを走査して変換
ConvertFiles fso.GetFolder(targetFolder)

MsgBox “変換処理が完了しました!”, 64, “完了”

Sub ConvertFiles(folder)
Dim file, subFolder, stream, content

‘ ファイルを順次処理
For Each file In folder.Files
‘ .txtファイルを対象(拡張子はお好みで)
If LCase(fso.GetExtensionName(file.Path)) = “txt” Then

‘ 1. Shift-JISで読み込む
Set stream = CreateObject(“ADODB.Stream”)
stream.Type = 2 ‘ adTypeText
stream.Charset = “Shift-JIS”
stream.Open
stream.LoadFromFile file.Path
content = stream.ReadText
stream.Close

‘ 2. UTF-8で書き出す(上書き)
stream.Charset = “UTF-8”
stream.Open
stream.WriteText content
stream.SaveToFile file.Path, 2 ‘ adSaveCreateOverWrite
stream.Close

Set stream = Nothing
End If
Next

‘ サブフォルダも再帰的に処理
For Each subFolder In folder.SubFolders
ConvertFiles subFolder
Next
End Sub

コードを読み解くポイント

1. `Option Explicit` の重要性
先頭にこれを書くことで、変数宣言を強制します。スペルミスによるバグを防ぐ、プロの作法です。
2. `ADODB.Stream` の2段階プロセス
一度メモリ上に全データを `content` 変数として読み込み、`Charset` を入れ替えてからファイルへ吐き出す。この「橋渡し」のロジックが、文字化けを防ぐ最短ルートです。
3. 再帰処理(Recursion)
`ConvertFiles` 関数の中で自分自身を呼び出しています。これにより、どれだけ深いフォルダ階層があっても、漏れなくすべてのファイルを拾い上げることができます。

現場のエンジニアからアドバイス

初めてスクリプトを実行するときは、必ずバックアップを取ってください。 私たちエンジニアは、常に「失敗」を想定して動きます。

  • エラーが起きたら?:`On Error Resume Next` を使って無理やり隠すのではなく、まずはエラーの内容を `WScript.Echo` で表示させてみてください。
  • さらに効率化するには?:処理対象をログファイルに出力するように改良すれば、後から「どのファイルが変換されたか」を追跡できる管理ツールへと進化します。

このスクリプトをマスターすれば、あなたはもうただの事務員ではありません。WindowsのOSレベルで業務を制御する「自動化エンジニア」の第一歩を踏み出したのです。

さあ、次はどんな面倒な作業を自動化しましょうか? 応援しています。

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