Word VBAを「真に」制御せよ:AutoCorrectEntriesによる辞書管理の極意
Wordのオートコレクト機能。多くのユーザーは「勝手に修正されるお節介な機能」程度にしか認識していません。しかし、業務自動化を志すエンジニアにとって、これは「Wordの挙動を標準機能のレベルで書き換える強力なフック」です。
今回は、手作業で登録している専門用語辞書や誤変換パターンを、VBAを用いて外部データから一括制御する「辞書管理エンジンの設計」について解説します。
—
1. なぜ「手動登録」が地獄への入り口なのか
現場の担当者がExcelやテキストで管理している用語リストを、いちいちWordの設定画面からポチポチと登録している姿を見かけます。これは単なる時間の浪費ではありません。
- 属人化の温床: 誰が最新の辞書を持っているか不明になる。
- 非再現性: PCを入れ替えた瞬間に、苦労して蓄積した辞書が消滅する。
- 整合性の欠如: 部署間で表記ゆれが統一されない。
オートコレクトをVBAで制御するということは、「辞書の定義をコード(または外部ファイル)化し、環境依存から解放する」という設計思想への転換を意味します。
—
2. オブジェクトモデルの深淵:AutoCorrectEntriesの真実
Word VBAにおいて、オートコレクトは `Application.AutoCorrect.Entries` コレクションを通じて操作します。
ここで重要なのは、このオブジェクトは 「Applicationスコープ(Word全体)」 であるという点です。つまり、特定の文書を開いたときだけ効くのではなく、そのPC上のWordすべてに影響を与えます。この「副作用」を理解した上で、排他制御やエラーハンドリングを構築するのがプロの作法です。
—
3. 【プロダクションコード】堅牢な辞書更新ツール
外部のCSVファイルから辞書を読み込み、既存の登録内容とマージする実用的なコード例です。
Option Explicit
‘ 辞書登録の失敗を防ぐための定数
Private Const ERR_ENTRY_EXISTS As Long = 4605 ‘ 既に登録済みの場合のトラップ用
”’
”’ CSVフォーマット: 検索文字列,修正後文字列
”’
Public Sub SyncAutoCorrectFromCSV(ByVal filePath As String)
Dim fileNo As Integer
Dim lineData As String
Dim items() As String
fileNo = FreeFile
On Error GoTo ErrorHandler
Open filePath For Input As #fileNo
Do Until EOF(fileNo)
Line Input #fileNo, lineData
items = Split(lineData, “,”)
‘ データの整合性チェック
If UBound(items) = 1 Then
RegisterAutoCorrect items(0), items(1)
End If
Loop
Close #fileNo
MsgBox “辞書の同期が完了しました。”, vbInformation
Exit Sub
ErrorHandler:
Close #fileNo
MsgBox “致命的なエラーが発生しました: ” & Err.Description, vbCritical
End Sub
”’
”’
Private Sub RegisterAutoCorrect(ByVal findStr As String, ByVal replaceStr As String)
Dim ace As AutoCorrectEntry
On Error Resume Next
‘ 一旦削除を試みる(存在しない場合は無視される)
Application.AutoCorrect.Entries.Item(findStr).Delete
‘ 新規登録
Application.AutoCorrect.Entries.Add Name:=findStr, Value:=replaceStr
On Error GoTo 0
End Sub
—
4. 開発における「3つの鉄則」
このコードを実務に投入する際、以下の3点を必ず守ってください。
① 「上書き」ではなく「削除&再登録」を徹底する
`AutoCorrectEntries.Add` は、既に存在するキーに対して実行するとエラーになります。既存の値を更新したい場合、`Add` を呼ぶ前に必ず `Item(key).Delete` を行うのが安全です。上記のコードでは `On Error Resume Next` を活用し、存在確認のオーバーヘッドを減らす効率的な実装にしています。
② 外部データは「CSV」で管理せよ
Excelで管理したくなる気持ちは分かりますが、VBAからExcelを起動して読み込むのはリソースの無駄です。CSVであれば `Line Input` で高速に読み込めます。Gitでバージョン管理する際もCSVの方が圧倒的に差分が見やすいのです。
③ 破壊的変更への対策
オートコレクトは「Word全体の挙動」を変えるため、誤ったデータを流し込むと事務作業が壊滅します。ツール実行前には必ず、現行の辞書をバックアップする(全リストをテキストファイルに書き出す)エクスポート機能を併装してください。
—
最後に:エンジニアとしての矜持
VBAは古臭い技術だと言われることがあります。しかし、Wordという巨大なアプリケーションの根幹にまで入り込み、その挙動をコードで支配する体験は、現代のWeb開発にはない「OSと密着した開発の醍醐味」があります。
「面倒な手作業」を「コードによる必然」に変えること。それが、我々エンジニアが現場に提供できる最大の価値です。さあ、今すぐあなたのPCの辞書を、あなたのコードで掌握してください。
