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レベルで業務を制御する「自動化エンジニア」の第一歩を踏み出したのです。
さあ、次はどんな面倒な作業を自動化しましょうか? 応援しています。
