Wordのマクロでワイルドカードを使って検索、置換をしようとしたところエラーが出ました。
Sub replace_test()
With Selection.Find
.Text = "あけまして*ございます"
.Replacement.Text = ""
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
With Selection.Find
.Text = "あけまして*ございます"
.Replacement.Text = ""
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
エラーメッセージは次の通り。
MatchPhrase、MatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyパラメータは、同時にTrueに設定することができません。
Wordで検索、置換をするときはいろいろなオプションがあります。
文書を直に検索、置換するときは矛盾するオプションは選べないようになっていますが、マクロで使うときには正しく設定しないとエラーになります。
例えば、ワイルドカード検索とあいまい検索はどちらが優先するのか、はっきりしないのでエラーになるようです。
ところで、ここで登場した5個のオプションの意味は次の通りです。どれもTrueかFalseを設定します。
MatchPhrase | 単語間のすべての空白文字および制御文字が無視されます。 |
MatchWildcards | 検索する文字列にワイルドカードが含まれている場合、このプロパティの値は True です。 |
MatchSoundsLike | True に設定すると、検索文字列に類似した単語が検索対象となります。 |
MatchAllWordForms | True に設定すると、検索文字列のすべての活用形が検索対象となります。 |
MatchFuzzy | True に設定すると、検索時に日本語の文字列のあいまい検索オプションが使用されます。 |
そこで、MatchWildcardsだけにTrueをセットし、その他はFalseをセットしました。
Sub replace_test()
With Selection.Find
.Text = "あけまして*ございます"
.Replacement.Text = ""
.MatchPhrase = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
With Selection.Find
.Text = "あけまして*ございます"
.Replacement.Text = ""
.MatchPhrase = False
.MatchWildcards = True
.MatchSoundsLike = False
.MatchAllWordForms = False
.MatchFuzzy = False
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
しかしこれでも同じエラーが出ます。
セットする順序が影響するようです。
Sub replace_test()
With Selection.Find
.Text = "あけまして*ございます"
.Replacement.Text = ""
.MatchPhrase = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.MatchFuzzy = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
With Selection.Find
.Text = "あけまして*ございます"
.Replacement.Text = ""
.MatchPhrase = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.MatchFuzzy = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
順序を変えてMatchWildcardsを最後にしてみたところ正しく動作しました。
コメント
[…] なお「MatchPhrase、MatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyパラメータは、同時にTrueに設定することができません」。 マクロでワイルドカードを使うときの注意 | You Look Too Cool […]