【実務・中級編】Wordの『オートコレクト』をVBAで制御する:誤変換を自動修正する辞書管理の自動化 – Word VBA解析バイブル

スポンサーリンク

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からオートコレクトを一括登録するメインルーチン
”’ 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の辞書を、あなたのコードで掌握してください。

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