dポイントプレゼントキャンペーン実施中!

例えば、Wordの文章で「田中」とあるものを「山田」に変えたい場合は、置き換えの機能を使ってマクロの記録ができると思います。
しかし、こうするとテキストボックスやヘッダフッタに記載された文字は変更できないように思います。
どうすれば、これらの文字も含めて置換の対象とすることができるか教えてください。

Sub Macro()
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = "山田"
.Replacement.Text = "田中"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = False
.MatchFuzzy = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub

A 回答 (1件)

[マクロの記録]は実行した機能をすべて記録するものではありません。


記録したものを実行しても、すべてのストーリーを対象にしません。

カーソルのあるストーリーのみに実行されるので、本文にある場合なら
本文のみが置換の対象になります。テキストボックス内へとカーソルを
置き記録したマクロを実行すれば、カーソルのある領域のみ置換をして
その他のテキストボックスや本文などは対象になりません。

文書全体のテキストを置換したい場合は、以下のテキスト置換用マクロ
などで対応します。

Sub AllReplaceText()
 Dim oStory As Range
 Dim Ftext As String
 Dim Rtext As String

 '検索する文字列
 Ftext = "山田"

 '置換後の文字列
 Rtext = "田中"

 Application.ScreenUpdating = False

 ' 本文領域にあるテキストを置換。
 For Each oStory In ActiveDocument.StoryRanges
   With oStory.Find
    .Text = Ftext
   End With
   With oStory
     Do While .Find.Execute = True
      .Text = Rtext
      .Collapse wdCollapseEnd
     Loop
   End With
 
  ' 本文領域以外のストーリーが存在する場合の置換。
 While Not (oStory.NextStoryRange Is Nothing)
   Set oStory = oStory.NextStoryRange
   With oStory.Find
     .Text = Ftext
   End With
   With oStory
     Do While .Find.Execute = True
      .Text = Rtext
      .Collapse wdCollapseEnd
     Loop
   End With
  Wend
 Next

 Application.ScreenUpdating = True
End Sub

' ただし、ヘッダー・フッターにあるテキストボックスなどは対象外

参考にした関連情報
http://support.microsoft.com/kb/409098/ja
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!