- ベストアンサー
マクロを教えてください。
ワードでマクロがうまくいきません。 マクロの知識はほとんどないのですが、「マクロの記録」の機能を使い、ワードで試しています。 今回は、 「{}の括弧でかこまれた単語を探し出し、その単語を括弧ごと消去する」 というのをしたいのです。 例えば、 ------------------------------- あいうえお{事実}ということ ↓ あいうえおということ ------------------------------ にしたいのです。 自分は ---------------------------------------- -置換-で、「検索する文字列」に「{*}」 「置換後の文字列」になにも書かない で、「置換」をクリック -------------------- マクロの記録を選択した後、上のように作業しました。 そしてマクロの記録をとめました。 が、なにもおこりません。 (*はワイルドカードのつもりなのですが、間違っていますでしょうか。) なにか変な操作をしたのか、と五度くらい試したのですが、 やはり動きません。 中身は、↓のようでした。 -------------------- Sub Macro1() ' ' Macro1 Macro ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "{*}" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .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 -------------------- どうしてうまく動かないのでしょうか。 教えていただけるとありがたいです。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 コードを見ると、ワイルドカードを使っているのに、そこがFalse(オフ)になっています。 VBAでは、特に落とし穴になりやすいです。それはともかく、このようなコードにしたらよいです。ほんのちょっと直しただけですが、このようにすれば、全部、削除できます。 当該ブックならThisDocument に入れてください。 Normal.dot の場合は、記録マクロに書かれてあるModule か、標準モジュールを挿入して、そこに入れてください。 おまけとして、{}は、半角・全角に対応するようにしました。 '------------------------------------------- Sub ParDelMacro() Selection.HomeKey Unit:=wdStory With Selection.Find .ClearFormatting .Text = "[{{]*[}}]" .Replacement.Text = "" .Forward = True .Wrap = wdFindStop .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True '←ここ End With Selection.Find.Replacement.ClearFormatting Selection.Find.Execute Replace:=wdReplaceAll End Sub 一応、ClearFormating を入れているので、問題ありませんが、#2さんのお書きになっているように、MatchWildcards は、最後に持ってきたほうが正解ですね。万が一、MatchFuzzy がTrue になっているとエラーが発生することがあります。逆も真で、MatchFuzzy がTrue の場合は、最後に置いたほうが良いようです。
その他の回答 (4)
- imogasi
- ベストアンサー率27% (4737/17069)
*はワイルドカードで、「オプション」のボタンをクリックして、「ワイルドカードを使用する」をONにしてないのが原因ではないか。
お礼
ありがとうございます。
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは #2の補足です >全く同じコードで動きました。 よく見たら全く同じではなかったので.. ワイルドカードを使用するにすれば、質問者さんの下記の部分の設定が変わります。 >.MatchWildcards = False >.MatchFuzzy = True また、一括置換えを指定したので下記の部分も違います。 >.Wrap = wdFindAsk
- A88No8
- ベストアンサー率52% (836/1606)
こんにちは 全く同じコードで動きました。 質問者さんがつまずいたのは、「検索と置換」タブの中にあるオプションで指定する「ワイルドカードを使用する」にチェックが入っていないのだと思います。 ご確認下さいね。 Sub ブレース単語削除マクロ() 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 .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub
お礼
ありがとうございました。 意外な落とし穴でした。うまく動きました。 早速教えて頂き、ありがとうございました。
- nattocurry
- ベストアンサー率31% (587/1853)
マクロ云々の前に、置換作業がまともにできてないんですよね? それをマクロに記録しても意味無いですよね? まずは、まともに置換できるようになりましょう。 Wordのことはよく解らないので、どうすればまともに置換できるのかは解りません。
お礼
ありがとうございます。
お礼
早速、ご丁寧に教えて頂き、ありがとうございました。 マクロに自信がなかったので、オプションにチェックを入れていないだけとは思いもよりませんでした。 うまく動きました。ありがとうございました。