Wordで禁止文字を検索してメッセージを表示するプログラムの作成方法

このQ&Aのポイント
  • Wordで特定の文字を検索してメッセージを表示するプログラムを作成したいですが、(2)以降のメッセージが表示されない場合、次の検索へ進む方法を教えてください。
  • Wordの検索機能を使用して、特定の文字を検索し、それに対応するメッセージを表示するプログラムの作成方法を教えてください。
  • Word上で特定の文字を検索し、見つかった場合は該当するメッセージを表示するプログラムを作成したいですが、(2)以降のメッセージが表示されない場合、次の検索へ進む方法を教えてください。
回答を見る
  • ベストアンサー

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

全くの素人です。 下記のように文字を見つけたらメッセージで表示するようなプログラムを造りたいです。 使用は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

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.1

こんばんは。 > (1)しかなくても(2)以下のメッセージも表示します。 Execute は、検索条件に該当するものが   1. 見つかった場合   True   2. 見つからない場合  False を返します。Execute の結果が True のとき、つまり、不正な文字が 見つかった場合のみ MsgBox を表示するようすれば良いでしょう。 具体的には、   With Selection.Find     .ClearFormatting     .Text = "(1)"     If .Execute = True Then       MsgBox "(1)は使用禁止文字です。変更してください"       Exit Sub ' // ※     End If   End With となります。 なお、ここで使われている Selection とは、プログラム実行時の カーソル位置のようなモノのことですから、  ・プログラムの冒頭でカーソルを文書の先頭に戻すコードを入れる  ・手動でカーソルを文書の先頭に戻してからプログラムを実行する などの対策が不可欠です。 そうでなければ、カーソル位置によって見つかったり見つからなかっ たり...という事になりますのでご注意を。 > (2)が無ければ、次の検索へ進むようにするにはどのように...? 上述のコードにおいて、※記号の部分に注目して下さい。この質問は、   「見つかった場合は、検索を終了させる」 と言い換えることができます。プログラムを終了させるのは、   Exit Sub   End などの命令です。両者の違いはヘルプで調べて下さい。

510motoki
質問者

お礼

大成功です。 ありがとうございました!!

関連するQ&A

  • macroコードを短縮できるでしょうか。

    下記のコードで、実行できます。大部分はマクロを記憶し、同じ処理を重ねただけのものです。 目的は、ワードで選択した文字列の中から数字を削除します。 ただし、下記のような場合は削除しません。 【請求項1】、項2、ないし3、いずれか1、【0019】、第3の、 この処理を行うために、差別化しました。 まず、数字を赤字で太字にしました。 次に、上記の、削除しては具合が悪い数字については、明朝で標準に戻すようにしてから、赤字で太字の数字を削除しました。 2000文字を超えるので、途中大幅にカットしました。 以下は、コードです。 ~~~~~~~~~~~~~~~~~~~~~~~~ Private Sub 符号削除() Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "第1" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "第2" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "又は2" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With ↓以下、20まで繰り返し Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Range.Find .ClearFormatting .Text = "乃至20" .Replacement.Text = "" .Replacement.Font.Color = 1 .Replacement.Font.Bold = False .Execute Replace:=wdReplaceAll End With Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "1" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll ↓以下、9,0まで繰り返し Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "9" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll Selection.Find.ClearFormatting Selection.Find.Font.Bold = True Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "0" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = True .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ~~同じ繰返しを短くする部分の正規表現の使い方やloopを指南していただけたら幸甚です。

  • Word2007のマクロについて

    こんにちは。 Word2007のマクロについて質問させて下さい。 ・タイトル行が(16738047)色で、本文が黒文字の日本語の文書があります。 ・タイトル行内でキーワード検索を行いたいです。 ・1個ずつ内容を確認したいので「次を検索」 MsgBoxを使用しています。 以下のコードを実行すると、単語が1個飛ばしに選択されてしまいます。 どこを変更すればいいでしょうか? 教えてください。よろしくお願いします。 Sub タイトル検索() Dim myKW As String 'キーワード myKW = InputBox("検索する文字を入力して下さい") Selection.HomeKey Unit:=wdStory 'カーソルを文頭に移動 With Selection.Find .ClearFormatting .Font.Color = 16738047 .Text = myKW .MatchWildcards = False .MatchFuzzy = False If Len(myKW) = 0 Then Exit Sub If .Execute = True Then Do While .Execute If MsgBox("次を検索", vbokcansel, "確認") = vbOK Then Selection.Find.Execute End If Loop   MsgBox "処理が終了しました。" Else MsgBox "文字はありませんでした。" End If End With With Selection.Find ' 検索・置換のクリア .ClearFormatting: .Replacement.ClearFormatting .Text = "": .Replacement.Text = "" .MatchWildcards = False: .MatchFuzzy = False End With End Sub

  • 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

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

    こんにちは いつもお世話になっています ワード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

  • 特定の色のマーキングだけを解除するマクロ

    Wordのマクロについての質問です 複数の色でマーキングしている文書があり、 特定の色のマーキングだけを解除するマクロを 作成していますが、マーキングの色の指定の仕方がわかりません。 マーキングの色の指定はどのよう(どこ)にすれば、よいのですか。 Sub マーキングなし() ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting Selection.Find.Replacement.Highlight = False With Selection.Find .ClearFormatting .Highlight = True .Text = "" .Replacement.Text = "" .Forward = True .Wrap = wdFindContinue .Format = 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マクロで検索⇒フォント変更したいが、結果がとびとびになります。

    MSwordのマクロについてです。マクロはど素人です。 「数式に使うa,b,n,p,q,r,t,u,v,w,x,y,zの文字を検索して、CMUserifというフォントに変え、サイズを2pt大きくする」 つもりで、以下のマクロを見よう見まねで作って実行したところ、うまく変更される文字とされない文字が混在してしまいます。 これはどのような理由によるもので、また、どのようにマクロを訂正すればよいのでしょうか。 --- Sub 数式用フォントに変更() Selection.StartOf wdStory With Selection.Find Do While .Execute(FindText:=\"[a-bn-np-rt-z]\", Forward:=True, Format:=False, MatchWildcards:=True, MatchSoundsLike:=False) = True With Selection Selection.Find.Execute Selection.Font.Name = \"CMU Serif\" Selection.Font.Size = Selection.Font.Size + 2 Selection.Find.ClearFormatting End With Loop End With End

  • WORD VBA 繰り返し処理

    WORD VBAについて教えてください。 つぎのようなマクロがあり、これを検索する文字列がなくなるまで、繰り返して、処理するようにしたいのですが、どうすればよいのでしょうか? Sub Macro1() Selection.Find.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 Selection.MoveRight Unit:=wdCharacter, Count:=1 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

  • myText = Selection.Range.Textについて

    任意の文字列を選択することを含むワードのマクロでは、検索置換ウインドウを使うと、以後、正常な置換が行われないようなのですが、どうしたら、正しい置換が行われるように確保できますでしょうか。どなたか、お教え願います。例えば、以下のコードです。 Dim myText As String myText = Selection.Range.Text With Selection.Find With .Replacement.Font .Name = "明朝" .Color = 255 .Bold = True End With .ClearFormatting .Text = myText .Format = True .Forward = True .Wrap = wdFindAsk '.Wrap = wdFindContinue .MatchFuzzy = False Selection.Find.Execute Replace:=wdReplaceAll End With ある文字列を選んで実行すると、赤字で太字になります。別の文字列をを選んで実行すると、同様に赤字で太字になります。ところが、検索置換ウインドウを使ってしまうと、その後は、検索置換ウインドウの入力状態に支配されてしまいます。 このようなことは、他のマクロでも確認しています。例えば次のマクロもそうです。 Dim myText As String myText = Selection.Range.Text Options.DefaultHighlightColorIndex = wdBrightGreen With Selection.Find With .Replacement .ClearFormatting .Highlight = True End With End With With Selection.Find With .Replacement .ClearFormatting .Highlight = True End With .ClearFormatting .Text = myText .Format = True .Forward = True .Wrap = wdFindAsk '.Wrap = wdFindContinue '.MatchFuzzy = True Selection.Find.Execute Replace:=wdReplaceAll End With myText = Selection.Range.Textはだめなようです。 通常の検索置換は、検索置換ウインドウが作動するようです。検索置換ウインドウが作動しない検索置換のコードがあれば教えてください。 For~Nextによる一文字ずつの繰り返し処理では時間がかかるので、一ワードずつFor Eachの繰り返し処理で検索置換ウインドウが作動しない検索置換のコードがあれば教えていただけると幸甚です。

専門家に質問してみよう