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

スポンサーリンク

こんにちは! Word VBAの世界へようこそ。
マクロの記録ボタンを押して「なんだか動いたけれど、中身はよくわからない……」という段階を卒業し、いよいよ自分の手でWordを自在にコントロールしたいと思っているあなたへ。

今回は、Word VBAの真骨頂の一つである「オートコレクト(自動修正)機能のプログラム制御」を徹底解説します。

「特定の略語を入力したら、一瞬で正式名称に展開される」
「よくあるタイポ(打ち間違い)を、入力した瞬間に正しい文字に矯正する」

これを手動で辞書登録するのではなく、VBAを使ってコードから一括管理・操作できるようになると、業務効率化のレベルが一段も二段も跳ね上がります。ここをクリアすれば、あなたのWord VBAのスキルは「初級者」から確実に「中級者の扉を開いたエンジニア」へと進化しますよ。

さあ、深呼吸して、一緒にWordの奥深い世界へ足を踏み入れましょう!

1. なぜ「オートコレクト」をVBAで操る必要があるのか?

Wordには、入力した文字列を別の文字列に自動置換する「オートコレクト」という強力な機能があります。例えば、「(c)」と打つと「©」に変わったりする、あれです。

これを活用すれば、社内用語や複雑な製品名、ミスしやすい漢字などを登録しておくことで、文書作成スピードが爆発的に向上します。

しかし、手動で辞書登録するにはこんな悩みがありますよね。

  • メンバー全員に同じ辞書設定を配布・同期するのが面倒。
  • プロジェクトごとに置換するキーワードをごっそり入れ替えたい
  • 大量の単語を一気に登録・削除したい。

これらをすべて解決するのが、今回学ぶ `AutoCorrectEntries`(オートコレクトエントリ)オブジェクトです。VBAを使えば、一瞬で辞書の登録・検索・削除が行えるようになります。

2. オートコレクトを操るための「オブジェクト構造」を理解しよう

Word VBAのコードを書く前に、頭の中に「地図」を描いておきましょう。Wordのオブジェクト階層は、ロシアの民芸品「マトリョーシカ」に似ています。

Application(Wordアプリ全体)
┗ AutoCorrect(オートコレクト機能全体)
┗ AutoCorrectEntries(辞書に登録されている単語のコレクション=集合体)
┗ AutoCorrectEntry(個別の単語データ:1つひとつの「キーワードと置換後文字列」のペア)

私たちが操作するのは、一番外側の `Application` からぶら下がる `AutoCorrect.Entries` です。このコレクション(集合体)に対して、「新しい単語を追加して」「探して」「消して」と命令を出していきます。

3. 【実践】今すぐ使える!オートコレクト辞書を操作するVBAコード

それでは、実際の開発現場でそのまま使える実用的なコードを見ていきましょう。
VBAエディタ(Alt + F11)を開き、標準モジュールに以下のコードを貼り付けてみてください。

① 辞書に新しい単語を登録する(Addメソッド)

まずは、特定のキーワードと、置換後の文字列を辞書に登録する基本のコードです。

Sub RegisterAutoCorrectEntry()
Dim keyWord As String
Dim replaceWord As String

‘ 登録するキーワードと置換後の文字列を定義
keyWord = “社内略称A”
replaceWord = “株式会社超絶すごいテクノロジーズ”

‘ エラーハンドリング(既に同じキーが存在する場合のエラー対策)
On Error GoTo ErrorHandler

‘ オートコレクト辞書に新しいエントリを追加
‘ 構文: Application.AutoCorrect.Entries.Add Name:=キー, Value:=置換後文字列
Application.AutoCorrect.Entries.Add Name:=keyWord, Value:=replaceWord

MsgBox “「” & keyWord & “」をオートコレクトに登録しました!”, vbInformation
Exit Sub

ErrorHandler:
‘ すでに同名のキーが存在する場合などのエラー処理
MsgBox “登録に失敗しました。すでに同じキーワードが存在する可能性があります。”, vbExclamation
End Sub

💡 コードの解説

  • `Application.AutoCorrect.Entries.Add`:これが心臓部です。`Name`に「入力する文字」、`Value`に「変換された後の文字」を指定します。
  • 初学者の方が引っかかりやすいポイントとして、すでに同じ名前のキーワードが登録されている状態で `.Add` を実行するとエラーになる性質があります。そのため、実務では上記のように `On Error` を仕込んでおくのがスマートなプログラミングです。

② 登録されているキーワードを安全に「上書き・追加」する

先ほど、「すでに存在するとエラーになる」と言いました。実務では、「古い定義があれば上書きし、なければ新規追加する」というスマートな処理(UPSERT的な処理)が求められます。

以下のコードを見てください。ここが少し知的なエンジニアの見せどころです。

Sub SmartRegisterAutoCorrect(keyWord As String, replaceWord As String)
Dim ace As AutoCorrectEntry
Dim isExist As Boolean

isExist = False

‘ 辞書の中にすでに同じキーワードがあるかループして探す
For Each ace In Application.AutoCorrect.Entries
If ace.Name = keyWord Then
isExist = True
Exit For
End If
Next ace

If isExist = True Then
‘ すでに存在する場合は、一度削除してから追加する(実質的な上書き)
Application.AutoCorrect.Entries(keyWord).Delete
End If

‘ 新規追加
Application.AutoCorrect.Entries.Add Name:=keyWord, Value:=replaceWord

MsgBox “「” & keyWord & “」の辞書登録を完了しました(上書き保存)”, vbInformation
End Sub

‘ テスト実行用のマクロ
Sub TestSmartRegister()
Call SmartRegisterAutoCorrect(“hsk”, “高速開発手法”)
End Sub

💡 ここがエンジニアの知見!

`AutoCorrectEntries` には、キーを指定して直接存在確認をするような便利なメソッドが標準では用意されていない場合があります。そのため、`For Each` で全件走査(あるいはエラートラップ)するのが確実なアプローチです。
オブジェクトのライフサイクルを意識し、「存在確認 ➔ 削除 ➔ 再作成」という安全なフローを組むことで、マクロが途中で止まってしまう恐怖から解放されます。

③ 不要になったオートコレクト項目を削除する

「プロジェクトが終わったので、一時的に登録した辞書を綺麗に掃除したい」という時は、`Delete` メソッドを使います。

Sub DeleteAutoCorrectEntry()
Dim targetKey As String
targetKey = “hsk”

On Error Resume Next
‘ 指定したキーのエントリを取得して削除
Application.AutoCorrect.Entries(targetKey).Delete

If Err.Number = 0 Then
MsgBox “「” & targetKey & “」を辞書から削除しました。”, vbInformation
Else
MsgBox “指定されたキーワードは辞書に存在しませんでした。”, vbExclamation
End If
On Error GoTo 0
End Sub

4. 陥りやすい罠とエラー回避の心得

Word VBAでオートコレクトを操作する際、初心者が必ずと言っていいほどハマる「罠」がいくつかあります。プロの視点から事前にお伝えしておきますね。

1. 大文字・小文字の区別
Wordのオートコレクトは、デフォルトでアルファベットの大文字・小文字を区別する設定になっています。コードで登録する際も、ユーザーが入力する実際のキーボード入力(半角・全角、大文字・小文字)と完全に一致させる必要があります。
2. プレーンテキストと書式付きテキスト
実は、オートコレクトには「文字だけの置換」だけでなく、「表や画像を含んだ書式付きテキスト(FormattedText)」を登録する機能もあります。`Entries.Add` を使う場合は標準でプレーンテキストになりますが、複雑なオブジェクトを扱う際はメモリリークや意図しない書式の継承に注意してください。
3. PCをまたいだ共有の限界
Wordのオートコレクト辞書(通常は `.acl` ファイルやOfficeのユーザー設定)は、PCのローカル環境に保存されます。そのため、「VBAで一括登録するマクロ」を配布して、ボタン一つで各メンバーのPCの辞書を最新化する仕組み(イニシャライザスクリプト)を作るのが、実務では最も堅牢で確実な運用方法となります。

おわりに:ここをクリアすれば、Word VBAは怖くない!

お疲れ様でした! 今回はWordの「オートコレクト」をVBAで制御し、辞書管理を自動化する手法を解説しました。

  • `Application.AutoCorrect.Entries` で辞書コレクションにアクセスすること
  • `Add` や `Delete` を使ってプログラムから動的に単語をコントロールできること
  • エラーハンドリングを組み込むことで、堅牢なプログラムが書けること

これらを理解したあなたなら、単なる「マクロの記録の継ぎ接ぎ」ではなく、ロジカルでメンテナンス性の高い業務自動化コードを書くことができます。

「ここをこう変えたらどうなるだろう?」という好奇心を大切に、ぜひご自身の業務環境でも試してみてくださいね。あなたのVBAライフが、より豊かでスマートなものになることを応援しています!

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