Wordで作成した文書に、たくさんのテキストボックスが含まれていると、手作業で文字を置き換えるのは大変ですよね。特に、何十個、何百個ものテキストボックスがある場合、効率的に作業を進めるためにはVBA(Visual Basic for Applications)を活用するのが効果的です。
今回は、初心者の方にもわかりやすく、Word VBAを使って文書内のテキストボックス内の文字を一括で置換する方法をご紹介します。
Word VBAとは?
Word VBAは、Microsoft Wordに組み込まれているプログラミング言語で、文書の編集や操作を自動化するために使用されます。例えば、何度も繰り返し行う作業をマクロとして記録し、ボタン一つで実行できるようにすることができます。
テキストボックス内の文字を置換するVBAコード
以下のVBAコードを使うことで、文書内のすべてのテキストボックス内の指定した文字を一括で置換することができます。
Sub ReplaceTextInTextBoxes()
Dim shp As Shape
Dim searchWord As String
Dim replaceWord As String
' 置換する文字列を入力
searchWord = InputBox("検索する文字列を入力してください")
replaceWord = InputBox("置換後の文字列を入力してください")
' 文書内のすべてのShapeをチェック
For Each shp In ActiveDocument.Shapes
If shp.Type = msoTextBox Then
' テキストボックス内の文字を置換
shp.TextFrame.TextRange.Replace FindText:=searchWord, ReplaceWith:=replaceWord, Replace:=wdReplaceAll
End If
Next shp
End Sub
このコードを実行すると、文書内のすべてのテキストボックス内の指定した文字が一括で置換されます。
注意点とアドバイス
- バックアップを取る: VBAを実行する前に、必ず文書のバックアップを取っておきましょう。万が一、思わぬ結果になってしまった場合でも元に戻すことができます。
- 置換対象の確認: 置換する文字列が他の重要な部分にも含まれていないか、事前に確認しておくことをおすすめします。
- VBAの実行方法: VBAを実行するには、Wordの「開発」タブを表示し、「Visual Basic」をクリックしてVBAエディタを開きます。新しいモジュールを挿入し、上記のコードを貼り付けて実行します。
よくある質問や疑問
Q1: VBAの実行方法がわかりません。
VBAを実行するには、Wordの「開発」タブを表示する必要があります。表示されていない場合は、以下の手順で表示できます。
- Wordを開き、「ファイル」タブをクリックします。
- 「オプション」を選択します。
- 「リボンのユーザー設定」を選択します。
- 右側のリストから「開発」にチェックを入れ、「OK」をクリックします。
これで「開発」タブが表示されるようになります。
Q2: テキストボックス以外の図形内の文字も置換できますか?
はい、できます。上記のコードでは、`shp.Type = msoTextBox`の部分を変更することで、他の図形(例えば、`msoAutoShape`や`msoGroup`など)にも対応できます。ただし、すべての図形タイプに対応するためには、さらに条件分岐を追加する必要があります。
Q3: 置換後の文字列に書式を適用できますか?
はい、できます。`TextRange`オブジェクトを使用することで、フォントの種類やサイズ、色などの書式を指定することができます。例えば、以下のように書式を設定できます。
shp.TextFrame.TextRange.Font.Name = "MS ゴシック"
shp.TextFrame.TextRange.Font.Size = 12
shp.TextFrame.TextRange.Font.Color = RGB(255, 0, 0) ' 赤色
Q4: 「shp.TextFrame.TextRange.Replace FindText:=searchWord, ReplaceWith:=replaceWord, Replace:=wdReplaceAll」はWord2021のVBAでは、コンパイルエラーが発生しました。使えませんでした!
最新バージョンに対応しておらずごめんなさい!
下記のコードであれば大丈夫ですので試してみてください。
Sub ReplaceTextInTextBoxes_Universal()
Dim shp As Shape
Dim objRange As Range ' TextFrame.TextRangeをRangeオブジェクトとして扱うための変数
Dim searchWord As String
Dim replaceWord As String
' 1. 置換する文字列の入力
On Error Resume Next ' エラー発生時は処理をスキップ(入力キャンセル時など)
searchWord = InputBox("【検索】置換したい文字列を入力してください。")
replaceWord = InputBox("【置換】置き換え後の新しい文字列を入力してください。")
On Error GoTo 0 ' エラー処理を元に戻す
' 入力がキャンセルされたり、空欄だった場合は終了
If searchWord = "" Or replaceWord = "" Then
If MsgBox("検索文字列または置換文字列が入力されていません。処理を終了しますか?", vbYesNo) = vbYes Then
Exit Sub
End If
End If
Application.ScreenUpdating = False ' 画面の更新を一時停止し、処理速度を向上
' 2. 文書内のすべてのShape(図形)をチェック
For Each shp In ActiveDocument.Shapes
' Shapeがテキストボックス(Type = msoTextBox)であるかを確認
If shp.Type = msoTextBox Then
' テキストボックスがテキストフレームを持っているか、かつテキストが含まれているかを確認
If shp.HasTextFrame Then
' TextFrame.TextRangeオブジェクトを取得
Set objRange = shp.TextFrame.TextRange
' TextRangeに対してFindオブジェクトを使用し、置換を実行
With objRange.Find
.ClearFormatting ' 既存の書式設定をクリア
.Replacement.ClearFormatting
.Text = searchWord ' 検索文字列
.Replacement.Text = replaceWord ' 置換文字列
.Forward = True ' 前方検索
.Wrap = wdFindStop ' 検索を継続しない
.Format = False ' 書式検索を行わない
.MatchCase = False ' 大文字/小文字を区別しない
.MatchWholeWord = False ' 単語全体を対象としない
' 実行: Replace:=wdReplaceAll で全てを置換
.Execute Replace:=wdReplaceAll
End With
End If
End If
Next shp
Application.ScreenUpdating = True ' 画面の更新を再開
MsgBox "テキストボックス内の文字列の置換が完了しました。", vbInformation
End Sub
今すぐ解決したい!どうしたらいい?
いま、あなたを悩ませているITの問題を解決します!
「エラーメッセージ、フリーズ、接続不良…もうイライラしない!」
あなたはこんな経験はありませんか?
✅ ExcelやWordの使い方がわからない💦
✅ 仕事の締め切り直前にパソコンがフリーズ💦
✅ 家族との大切な写真が突然見られなくなった💦
✅ オンライン会議に参加できずに焦った💦
✅ スマホの重くて重要な連絡ができなかった💦
平均的な人は、こうしたパソコンやスマホ関連の問題で年間73時間(約9日分の働く時間!)を無駄にしています。あなたの大切な時間が今この悩んでいる瞬間も失われています。
LINEでメッセージを送れば即時解決!
すでに多くの方が私の公式LINEからお悩みを解決しています。
最新のAIを使った自動応答機能を活用していますので、24時間いつでも即返信いたします。
誰でも無料で使えますので、安心して使えます。
問題は先のばしにするほど深刻化します。
小さなエラーがデータ消失や重大なシステム障害につながることも。解決できずに大切な機会を逃すリスクは、あなたが思う以上に高いのです。
あなたが今困っていて、すぐにでも解決したいのであれば下のボタンをクリックして、LINEからあなたのお困りごとを送って下さい。
ぜひ、あなたの悩みを私に解決させてください。
まとめ
Word VBAを活用することで、文書内のテキストボックス内の文字を効率的に一括置換することができます。特に、複数のテキストボックスがある文書では、手作業での置換は時間がかかりますが、VBAを使うことで作業時間を大幅に短縮できます。
VBAの使い方に不安がある方も、まずは上記のコードを試してみてください。慣れてきたら、さらに応用的な操作にも挑戦してみましょう。
他にも疑問やお悩み事があれば、お気軽にLINEからお声掛けください。





コメント
「shp.TextFrame.TextRange.Replace FindText:=searchWord, ReplaceWith:=replaceWord, Replace:=wdReplaceAll」はWord2021のVBAでは、コンパイルエラーが発生しました。使えませんでした!
匿名 様
コメントありがとうございます。
また、参考URLもありがとうございます。
最新のバージョンに対応していないコードで大変申し訳ございません。大変勉強になりました。
下記のコードであれば解決できると思いますのでお試しください。
【マクロコード】
Sub ReplaceTextInTextBoxes_Universal()
Dim shp As Shape
Dim objRange As Range ‘ TextFrame.TextRangeをRangeオブジェクトとして扱うための変数
Dim searchWord As String
Dim replaceWord As String
‘ 1. 置換する文字列の入力
On Error Resume Next ‘ エラー発生時は処理をスキップ(入力キャンセル時など)
searchWord = InputBox(“【検索】置換したい文字列を入力してください。”)
replaceWord = InputBox(“【置換】置き換え後の新しい文字列を入力してください。”)
On Error GoTo 0 ‘ エラー処理を元に戻す
‘ 入力がキャンセルされたり、空欄だった場合は終了
If searchWord = “” Or replaceWord = “” Then
If MsgBox(“検索文字列または置換文字列が入力されていません。処理を終了しますか?”, vbYesNo) = vbYes Then
Exit Sub
End If
End If
Application.ScreenUpdating = False ‘ 画面の更新を一時停止し、処理速度を向上
‘ 2. 文書内のすべてのShape(図形)をチェック
For Each shp In ActiveDocument.Shapes
‘ Shapeがテキストボックス(Type = msoTextBox)であるかを確認
If shp.Type = msoTextBox Then
‘ テキストボックスがテキストフレームを持っているか、かつテキストが含まれているかを確認
If shp.HasTextFrame Then
‘ TextFrame.TextRangeオブジェクトを取得
Set objRange = shp.TextFrame.TextRange
‘ TextRangeに対してFindオブジェクトを使用し、置換を実行
With objRange.Find
.ClearFormatting ‘ 既存の書式設定をクリア
.Replacement.ClearFormatting
.Text = searchWord ‘ 検索文字列
.Replacement.Text = replaceWord ‘ 置換文字列
.Forward = True ‘ 前方検索
.Wrap = wdFindStop ‘ 検索を継続しない
.Format = False ‘ 書式検索を行わない
.MatchCase = False ‘ 大文字/小文字を区別しない
.MatchWholeWord = False ‘ 単語全体を対象としない
‘ 実行: Replace:=wdReplaceAll で全てを置換
.Execute Replace:=wdReplaceAll
End With
End If
End If
Next shp
Application.ScreenUpdating = True ‘ 画面の更新を再開
MsgBox “テキストボックス内の文字列の置換が完了しました。”, vbInformation
End Sub