• ベストアンサー

Wordマクロで目に見える文字列だけを探すには

Word2000のマクロで、目に見える文字列だけ(つまり空白・改行・タブなどは対象外)を探す方法はありますか。 操作をマクロに記録してみましたが、「任意の1文字」を選ぶと、改行とかの「目に見えない」文字まで検索されてしまいます。 そこで、 Selection.Find.ClearFormatting With Selection.Find .Text = "^?" の "^?" を、「目に見える文字列」を指す内容に変えられますか? それが無理なら、何かほかに簡単な方法はないでしょうか。 マクロは素人なので、複雑なことはできないです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.4

ANo.3 です。 .MatchWildcards = True です。

toyboys
質問者

お礼

#3と#4 の通りに書いてうまくいきました。ありがとうございました! [!^13^9^32]の意味はわかってないんですが、追々勉強したいと思います。。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんにちは。 Word VBAで、正規表現検索を組める力があるなら、それで出来るでしょうけれども、記録マクロ程度のレベルでは、とても無理だと思います。経験者さんたちが、一杯いらっしゃるようですから、その方たちにお願いしても良いと思いますが、私には、最初の質問さえ良く分からないですね。 一体、「目に見える文字だけを探す」ということは、どういうことなのでしょうか。見つけたら、どうするのでしょうか。 ベタファイルを作る、抜き出して、別のテキスト・ファイルにする、蛍光ペンで色を塗る? など。

toyboys
質問者

お礼

アドバイスありがとうございます。#3,#4の方のご回答により解決しました。すぐに締め切らなくてすみません。 見つけた後に行いたい処理はいろいろあって、とにかく汎用性のある「見つけ方」が必要でした。

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.3

たとえば、 .Text = "[!^13^9^32]" くらいじゃないですか。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sub test023() Dim wd As Object For Each wd In ActiveDocument.Words MsgBox wd Next End Sub をやってみて、質問者の要望・ニーズと照らしてどうですか。 自信ないが。 語間で何か空白らしいものを表示するので、省こうとしたがうまくいかなかったがとりあえず。 ーー ワードVBAなど(=情報が少ないのに)難しいことをやりますね。 === ただこういう質問は、全体のニーズを(どういうことをやりたい中での一環か、)質問の中で説明をしておいたほうが良いと思う。 「それならこうで」という答えがひょっとして出るかもしれない。

toyboys
質問者

お礼

わざわざ試してくださってありがとうございます。今後のためにやってみますね。

noname#79209
noname#79209
回答No.1

正規表現で出来ませんかね。 http://arrow3.way-nifty.com/shige/2006/07/vba__fc44.html MyRegExp.Pattern = "\s" 或いは以下のDLLを組み込むことで可能です。漢字にも対応しています。 http://www.hi-ho.ne.jp/babaq/bregexp.html If Match("/[\t\n\r\f\a\e\s]/k",.Text) = "1" Then とか... ご参考まで...

toyboys
質問者

お礼

補足の欄にお礼を書いてしまいました。失礼しました。

toyboys
質問者

補足

ご回答ありがとうございます。正規表現はテキストエディタ等ではよく使うんですが、VBAは素人なので…今後勉強してトライしたいです。

関連するQ&A

  • ワードでマクロがうまくいきません。

    よろしくお願いします。 マクロの知識はほとんどないのですが、 「マクロの記録」の機能を使い、ワードで 「スペースを探し出し、そのスペースにアンダーラインを引く。」 ために、 -------------------- 編集ー置換ー 検索する文字列にスペースをタイプ、 置換後の文字列にスペースをタイプ、 オプションの書式で、フォント、下線、一重下線 すべて置換 -------------------- マクロの記録を選択した後、上のように作業しました。 そしてマクロの記録をとめました。 マクロの記録中の操作では、思い通りに置換されるのですが、 次にそのマクロを作動させると、なにもおこりません。 なにか変な操作をしたのか、と五度くらい試したのですが、 やはり動きません。 中身は、↓のようでした。 -------------------- Sub Macro2() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = " " .Replacement.Text = " " .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub -------------------- どうしてうまく動かないのでしょうか。 教えていただけるとありがたいです。よろしくお願いします。

  • ワードで選択範囲だけの改行を削除するマクロ

    こんにちは いつもお世話になっています ワード2010で、選択範囲だけの部分の改行を削除するマクロを記録マクロで作ったのですが、選択部以外もすべて改行してしまいます。どこがいけないのでしょうか。あるいは、操作の仕方でしょうか。以前は使えていたと思うのですが、仕様が変わったのでしょうか。 任意の範囲を選択しておいて、記録を開始しました。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ネット上で見つけた以下のマクロでもすべての改行が削除されます。 http://okwave.jp/qa/q960285.html Sub Macro14() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = " " End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • マクロを教えてください。

    ワードでマクロがうまくいきません。 マクロの知識はほとんどないのですが、「マクロの記録」の機能を使い、ワードで試しています。 今回は、 「{}の括弧でかこまれた単語を探し出し、その単語を括弧ごと消去する」 というのをしたいのです。 例えば、 ------------------------------- あいうえお{事実}ということ ↓ あいうえおということ ------------------------------ にしたいのです。 自分は ---------------------------------------- -置換-で、「検索する文字列」に「{*}」 「置換後の文字列」になにも書かない で、「置換」をクリック -------------------- マクロの記録を選択した後、上のように作業しました。 そしてマクロの記録をとめました。 が、なにもおこりません。 (*はワイルドカードのつもりなのですが、間違っていますでしょうか。) なにか変な操作をしたのか、と五度くらい試したのですが、 やはり動きません。 中身は、↓のようでした。 -------------------- 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 -------------------- どうしてうまく動かないのでしょうか。 教えていただけるとありがたいです。よろしくお願いします。

  • word2007 マクロ

    下記マクロは蛍光ペン部分を消して、その文字数分にアンダーラインを引くマクロになります これを改造して、赤文字を消して、その文字数分を空欄にしたいのです。 ですが、wdColorRedの入れ方が分かりません。ご教授お願いします。 Sub Problem() '蛍光ペン部分を消して、アンダーラインを引く Selection.Find.ClearFormatting Selection.Find.Highlight = True Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = False With Selection.Find.Replacement.Font .Underline = wdUnderlineSingle .StrikeThrough = False .DoubleStrikeThrough = False .Outline = False .Shadow = False .Hidden = False .AllCaps = False .Superscript = False .Subscript = False End With With Selection.Find .Text = "*" .Replacement.Text = " ^z" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchFuzzy = False .MatchWildcards = True End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • Word-VBAで文字色を一括置換したいのですが、

    Word文書で、赤い文字だけを白文字に変更するマクロを作りたいと思い、マクロの記録機能で記録されたものを参考に以下のようなマクロを作りました。 With Selection.Find .ClearFormatting .Font.Color = wdColorRed .Replacement.ClearFormatting .Replacement.Font.Color = wdColorWhite End With このマクロには不都合がありまして、、、 1.カーソル位置より上方の赤文字は変更されない 2.テキストボックス内の赤文字も変更されない ということで困っております。ヘルプもあちこち見ましたが、どうにもうまくいきません。どなたかご存知の方、解決方法についてアドバイスをいただければ幸いです。

  • Word2010特定の名前を置き換えるマクロ

    例えば、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

  • Wordのマクロの繰り返しと停止

    Wordで"XX"の場所に"★"の後にある文字列を挿入、という以下のマクロを記録したのですが、この作業を★がなくなるまで繰り返したいと思っております。どのように記入すればよいでようか? Selection.HomeKey Unit:=wdStory Selection.Find.ClearFormatting With Selection.Find .Text = "★" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Selection.Delete Unit:=wdCharacter, Count:=1 Selection.Delete Unit:=wdCharacter, Count:=1 Selection.EndKey Unit:=wdLine, Extend:=wdExtend Selection.Cut Selection.HomeKey Unit:=wdStory Selection.Find.ClearFormatting With Selection.Find .Text = "XX" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Selection.Paste Selection.TypeBackspace End Sub

  • 【Word2007】ヘッダー、フッターの文字列を置き換えたい

    Word2007を使っています。 ヘッダー、フッターの文字列を置き換えるマクロを 作りたいと思っています。 ヘッダー、フッターには「$replace01」のような文字列があり、 それをDocumentのOpenイベントで自動的に置き換えたいと思っています。 ヘッダー、フッターにフォーカスがあれば、 Selection.Find.Executeで文字列が置き換えられそうだと、 マクロの記録をして分かりました。 しかし、ファイルを開いたときには、 Selectionがヘッダー、フッターにないため、 うまくいきません。 何か方法はございませんか? もしご存知でしたら、教えてください。 よろしくお願いいたします。

  • Wordマクロ

    Wordでワイルドカードを使った置換マクロを作ったのですが、 「MatchWildcardsとMatchSoundsLike、MatchAllWordForms、MatchFuzzyは、同時にTrueに設定することはできません。」 というエラーが出てしまいます。 MatchSoundsLike、MatchAllWordForms、MatchFuzzyは、 ソースに書いてないしTrueにもしていません。 どこが悪いのでしょうか? 以下がソースファイルです、よろしくお願いいたします。 Sub substitute() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "[!a-f]{1,}" .Replacement.Text = "@" .Forward = True .Wrap = wdFindContinue .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = True .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • 検索して、メッセージを表示したいです。

    全くの素人です。 下記のように文字を見つけたらメッセージで表示するようなプログラムを造りたいです。 使用はWordで考えています。 ただ、下記のプログラムを実行すると (1)しかなくても(2)以下のメッセージも表示します。 (2)が無ければ、次の検索へ進むようにするにはどのようにすればよいですか? Selection.Find.ClearFormatting With Selection.Find .Text = "(1)" Selection.Find.Execute MsgBox "(1)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(2)" Selection.Find.Execute MsgBox "(2)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(3)" Selection.Find.Execute MsgBox "(3)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(4)" Selection.Find.Execute MsgBox "(4)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(5)" Selection.Find.Execute MsgBox "(5)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(6)" Selection.Find.Execute MsgBox "(6)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(7)" Selection.Find.Execute MsgBox "(7)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(8)" Selection.Find.Execute MsgBox "(8)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(9)" Selection.Find.Execute MsgBox "(9)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(10)" Selection.Find.Execute MsgBox "(10)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(11)" Selection.Find.Execute MsgBox "(11)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(12)" Selection.Find.Execute MsgBox "(12)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(13)" Selection.Find.Execute MsgBox "(13)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(14)" Selection.Find.Execute MsgBox "(14)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(15)" Selection.Find.Execute MsgBox "(15)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(16)" Selection.Find.Execute MsgBox "(16)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(17)" Selection.Find.Execute MsgBox "(17)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(18)" Selection.Find.Execute MsgBox "(18)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(19)" Selection.Find.Execute MsgBox "(19)は使用禁止文字です。変更してください" End With Selection.Find.ClearFormatting With Selection.Find .Text = "(20)" Selection.Find.Execute MsgBox "(20)は使用禁止文字です。変更してください" End With

専門家に質問してみよう