Word-VBAで文字色を一括置換する方法

このQ&Aのポイント
  • Word-VBAを使用して、Word文書内の特定の文字色を一括で変更する方法を探しています。
  • 現在、赤い文字だけを白文字に変更するマクロを作成しましたが、カーソル位置より上方の赤文字やテキストボックス内の赤文字は変更されません。
  • 解決方法についてご存知の方、アドバイスをいただけると幸いです。
回答を見る
  • ベストアンサー

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

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

noname#148473
noname#148473

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

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

Wordのマクロは、あまり、作ったことがありませんので、うまくなかったら ご容赦ください。 Sub test()  Dim rngWord As Range  Dim shp As Shape  Dim rng As Range  '文字色の変更  For Each rngWord In ActiveDocument.Words   If rngWord.Font.Color = wdColorRed Then '赤    rngWord.Font.Color = wdColorWhite '白   End If  Next rngWord  'テキストボックスの中の文字色の変更  For Each shp In ThisDocument.Shapes   If shp.AutoShapeType = msoShapeRectangle Then    For Each rng In shp.TextFrame.ContainingRange.Characters     If rng.Font.Color = wdColorRed Then '赤      rng.Font.Color = wdColorWhite '白     End If    Next rng   End If  Next End Sub

noname#148473
質問者

お礼

ありがとうございました。 テキストボックス内もしっかり変換できました。

関連する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 マクロ

    下記マクロは蛍光ペン部分を消して、その文字数分にアンダーラインを引くマクロになります これを改造して、赤文字を消して、その文字数分を空欄にしたいのです。 ですが、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

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

    よろしくお願いします。 マクロの知識はほとんどないのですが、 「マクロの記録」の機能を使い、ワードで 「スペースを探し出し、そのスペースにアンダーラインを引く。」 ために、 -------------------- 編集ー置換ー 検索する文字列にスペースをタイプ、 置換後の文字列にスペースをタイプ、 オプションの書式で、フォント、下線、一重下線 すべて置換 -------------------- マクロの記録を選択した後、上のように作業しました。 そしてマクロの記録をとめました。 マクロの記録中の操作では、思い通りに置換されるのですが、 次にそのマクロを作動させると、なにもおこりません。 なにか変な操作をしたのか、と五度くらい試したのですが、 やはり動きません。 中身は、↓のようでした。 -------------------- 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

  • 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

  • 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

  • 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マクロで目に見える文字列だけを探すには

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

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

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

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

    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

専門家に質問してみよう