Word文書を大量に扱っていると、**「特定の語句を一括で置き換えたい」「毎回同じ置換作業を手動でやるのは面倒」**と感じたことはありませんか?
そんなときに役立つのが、VBA(Visual Basic for Applications)を使った置換の自動化です。この記事では、中学生でも簡単に試せる「Word VBAによる置換の基本的な使い方」や、具体的なコード例をわかりやすく解説します。
VBAとは:Wordを自動化する強力なツール

VBAの基本概念
VBA(Visual Basic for Applications)とは、Microsoft Office製品に組み込まれた簡易的なプログラミング言語です。難しそうに聞こえるかもしれませんが、実は中学生でも理解できるシンプルな仕組みです。
VBAを使うメリット
作業時間の大幅短縮:手動で何十分もかかる作業が数秒で完了
人的ミスの防止:同じ作業を正確に繰り返し実行
一貫性の確保:すべての文書で同じルールを適用
複雑な置換も可能:条件付きの置換や、複数の置換を連続実行
VBAが活躍する場面
年度更新作業:「令和5年」を「令和6年」に一括変更
表記統一作業:「株式会社」と「(株)」の表記を統一
誤字修正作業:よくある間違いを自動で修正
テンプレート更新:会社名やロゴの変更を複数文書に適用
Word VBAで文字列を置換する基本手順
ステップ1:開発タブの表示
まず、Wordで「開発」タブを表示する必要があります。通常は非表示になっているので、以下の手順で表示させます。
手順
- 「ファイル」をクリック
- 「オプション」を選択
- 「リボンのユーザー設定」をクリック
- 右側の一覧で「開発」にチェックを入れる
- 「OK」をクリック
これで、リボンメニューに「開発」タブが表示されます。
ステップ2:VBAエディターの起動
手順
- 「開発」タブをクリック
- 「Visual Basic」ボタンをクリック
新しいウィンドウが開き、これがVBAエディター(開発環境)です。ここでプログラムを書いたり実行したりします。
ステップ3:新しいモジュールの作成
手順
- VBAエディターで「挿入」メニューをクリック
- 「標準モジュール」を選択
「Module1」という新しいモジュール(プログラムを書く場所)が作成されます。
ステップ4:基本的な置換コードの入力
以下のコードをVBAエディターに入力します。
Sub 基本的な文字列置換()
With ActiveDocument.Content.Find
.Text = "置換前の文字"
.Replacement.Text = "置換後の文字"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
ステップ5:コードの実行
手順
- コードの中にカーソルを置く
- 「F5」キーを押す、またはツールバーの「▶」実行ボタンをクリック
これで、指定された文字列がすべて自動で置き換えられます。
コードの詳細説明
各行の意味
Sub 基本的な文字列置換()
プロシージャ(一連の処理をまとめたもの)の開始を宣言します。名前は自由に変更できます。
With ActiveDocument.Content.Find
現在開いているWord文書の内容に対して検索・置換を行うことを指定します。
.Text = "置換前の文字"
検索したい文字列を指定します。この部分を実際の文字に変更してください。
.Replacement.Text = "置換後の文字"
置換したい文字列を指定します。この部分も実際の文字に変更してください。
.Forward = True
文書の最初から最後に向かって検索することを指定します。
.Wrap = wdFindContinue
文書の最後まで検索したら、最初に戻って続行することを指定します。
.MatchCase = False
大文字と小文字を区別しないことを指定します。
.MatchWholeWord = False
単語の一部でも置換対象にすることを指定します。
.Execute Replace:=wdReplaceAll
実際の置換を実行します。「wdReplaceAll」はすべての該当箇所を置換することを意味します。
実践的なコード例
例1:年度の更新
Sub 年度更新()
With ActiveDocument.Content.Find
.Text = "令和5年"
.Replacement.Text = "令和6年"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
MsgBox "年度の更新が完了しました。"
End Sub
例2:会社名の表記統一
Sub 会社名統一()
With ActiveDocument.Content.Find
.Text = "株式会社ABC"
.Replacement.Text = "ABC株式会社"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
MsgBox "会社名の統一が完了しました。"
End Sub
例3:複数の置換を連続実行
Sub 複数置換()
Dim i As Integer
Dim 置換前(2) As String
Dim 置換後(2) As String
' 置換する文字列のペアを定義
置換前(0) = "テストー"
置換後(0) = "テスト"
置換前(1) = "サーバー"
置換後(1) = "サーバ"
置換前(2) = "コンピューター"
置換後(2) = "コンピュータ"
' 各ペアについて置換を実行
For i = 0 To 2
With ActiveDocument.Content.Find
.Text = 置換前(i)
.Replacement.Text = 置換後(i)
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
Next i
MsgBox "複数の置換が完了しました。"
End Sub
高度な置換オプション
大文字・小文字を区別する置換
Sub 大文字小文字区別()
With ActiveDocument.Content.Find
.Text = "Word"
.Replacement.Text = "Microsoft Word"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = True ' 大文字小文字を区別
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
完全一致のみを置換
Sub 完全一致置換()
With ActiveDocument.Content.Find
.Text = "PC"
.Replacement.Text = "パーソナルコンピュータ"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True ' 完全一致のみ
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
ワイルドカードを使った置換
Sub ワイルドカード置換()
With ActiveDocument.Content.Find
.Text = "[0-9]{4}年" ' 4桁の数字+「年」
.Replacement.Text = "西暦&年"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = True ' ワイルドカード有効
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
実際の活用例

ケース1:契約書の年度更新
状況:100ページの契約書で「2024年」を「2025年」に変更
従来の方法:
- 検索・置換ダイアログを開く
- 検索文字列と置換文字列を入力
- 「すべて置換」をクリック
- 確認作業
VBAを使用:
Sub 契約書年度更新()
With ActiveDocument.Content.Find
.Text = "2024年"
.Replacement.Text = "2025年"
.Execute Replace:=wdReplaceAll
End With
MsgBox "年度更新完了:" & .Found & "箇所を変更しました。"
End Sub
結果:数秒で完了、置換箇所数も表示
ケース2:マニュアルの表記統一
状況:技術マニュアルで略語の表記を統一
VBAコード:
Sub マニュアル表記統一()
Dim 表記パターン(4, 1) As String
' 統一したい表記パターンを定義
表記パターン(0, 0) = "ログイン"
表記パターン(0, 1) = "ログイン"
表記パターン(1, 0) = "ログ・イン"
表記パターン(1, 1) = "ログイン"
表記パターン(2, 0) = "データベース"
表記パターン(2, 1) = "データベース"
表記パターン(3, 0) = "データ・ベース"
表記パターン(3, 1) = "データベース"
表記パターン(4, 0) = "Webサイト"
表記パターン(4, 1) = "Webサイト"
Dim i As Integer
For i = 0 To 4
With ActiveDocument.Content.Find
.Text = 表記パターン(i, 0)
.Replacement.Text = 表記パターン(i, 1)
.Execute Replace:=wdReplaceAll
End With
Next i
MsgBox "表記統一が完了しました。"
End Sub
ケース3:個人情報の仮名化
状況:文書から実際の氏名を仮名に置換
VBAコード:
Sub 個人情報仮名化()
Dim 実名(2) As String
Dim 仮名(2) As String
実名(0) = "田中太郎"
仮名(0) = "Aさん"
実名(1) = "佐藤花子"
仮名(1) = "Bさん"
実名(2) = "鈴木次郎"
仮名(2) = "Cさん"
Dim i As Integer
For i = 0 To 2
With ActiveDocument.Content.Find
.Text = 実名(i)
.Replacement.Text = 仮名(i)
.MatchWholeWord = True
.Execute Replace:=wdReplaceAll
End With
Next i
MsgBox "個人情報の仮名化が完了しました。"
End Sub
エラー処理と安全対策
バックアップ作成付きの置換
Sub 安全な置換()
' バックアップファイル作成
Dim バックアップ名 As String
バックアップ名 = ActiveDocument.Path & "\" & "backup_" & Format(Now, "yyyymmdd_hhmmss") & "_" & ActiveDocument.Name
ActiveDocument.SaveAs2 バックアップ名
' 元のファイルを開き直し
Documents.Open ActiveDocument.FullName
' 置換実行
With ActiveDocument.Content.Find
.Text = "置換前"
.Replacement.Text = "置換後"
.Execute Replace:=wdReplaceAll
End With
MsgBox "置換完了。バックアップ:" & バックアップ名
End Sub
エラーハンドリング付きの置換
Sub エラー処理付き置換()
On Error GoTo エラー処理
With ActiveDocument.Content.Find
.Text = "検索文字"
.Replacement.Text = "置換文字"
.Execute Replace:=wdReplaceAll
End With
MsgBox "置換が正常に完了しました。"
Exit Sub
エラー処理:
MsgBox "エラーが発生しました:" & Err.Description
End Sub
よくある問題と解決方法
Q:VBAコードが実行されない
原因:マクロのセキュリティ設定が有効になっている
解決方法:
- 「ファイル」→「オプション」→「セキュリティセンター」
- 「セキュリティセンターの設定」をクリック
- 「マクロの設定」で「すべてのマクロを有効にする」を選択
- Wordを再起動
Q:置換結果が期待と違う
原因:検索条件の設定が適切でない
解決方法:
MatchWholeWord = True
:完全一致のみMatchCase = True
:大文字小文字を区別- 置換前にテスト実行で確認
Q:大量の文書を一度に処理したい
解決方法:複数ファイル処理用のコード
Sub 複数ファイル置換()
Dim ファイルパス As String
Dim ドキュメント As Document
ファイルパス = Dir("C:\Documents\*.docx")
Do While ファイルパス <> ""
Set ドキュメント = Documents.Open("C:\Documents\" & ファイルパス)
With ドキュメント.Content.Find
.Text = "置換前"
.Replacement.Text = "置換後"
.Execute Replace:=wdReplaceAll
End With
ドキュメント.Save
ドキュメント.Close
ファイルパス = Dir()
Loop
MsgBox "全ファイルの置換が完了しました。"
End Sub
効率化のためのコツ
コードの再利用
テンプレート化
よく使う置換パターンをテンプレートとして保存し、必要に応じて文字列部分だけを変更
ユーザー入力対応
Sub ユーザー入力置換()
Dim 検索文字 As String
Dim 置換文字 As String
検索文字 = InputBox("検索する文字列を入力してください")
置換文字 = InputBox("置換する文字列を入力してください")
If 検索文字 <> "" And 置換文字 <> "" Then
With ActiveDocument.Content.Find
.Text = 検索文字
.Replacement.Text = 置換文字
.Execute Replace:=wdReplaceAll
End With
MsgBox "置換が完了しました。"
End If
End Sub
ショートカットキーの設定
カスタムボタンの作成
- 「ファイル」→「オプション」→「リボンのユーザー設定」
- 「新しいグループ」を作成
- VBAマクロを追加してボタン化
注意点とベストプラクティス
重要な注意事項
必ずバックアップを作成:置換は元に戻すことが困難な場合があります
小範囲でテスト:大量のデータで実行する前に、小さなサンプルで動作確認
権限の確認:他の人が作成した文書では編集権限を確認
文字エンコーディング:特殊文字や記号が含まれる場合は注意が必要
セキュリティ考慮事項
マクロウイルス対策:信頼できるソースからのコードのみ実行
機密情報の取り扱い:個人情報や機密データを含む文書では特に慎重に
実行ログの記録:重要な文書では変更履歴を記録
まとめ
Word VBAによる置換は、繰り返しの作業を劇的に効率化できる強力な手段です。
重要なポイント
基本操作の習得:
- 開発タブの表示
- VBAエディターの使い方
- 基本的なコードの書き方と実行方法
実践的な活用:
- 年度更新、表記統一、誤字修正などの定型作業
- 複数の置換を連続実行
- ワイルドカードや条件付き置換の活用
安全な実行:
- 必ずバックアップを作成
- 小規模テストから始める
- エラー処理の実装
効率化のコツ:
- コードのテンプレート化
- ユーザー入力インターフェースの追加
- ショートカットキーやボタンの設定
コメント