質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

Q&A

解決済

4回答

5636閲覧

Word の VBAで特定の色で塗りつぶした語句を検索して蛍光ペンでハイライト表示したい

addresshopeph

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Word

Microsoft WordはMicrosoftが開発した業務用の文書生成用のソフトウェアです。

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

0グッド

0クリップ

投稿2020/08/30 09:57

編集2020/09/01 15:56

Word の VBAのコードについての質問です。
・やりたいこと
⓵文書の中の特定の色で塗りつぶした語句をEnterキーを押すごとに一か所ずつ検索して、その都度蛍光ペンでハイライト表示します。
⓶Enterキーを押して次の部分の検索に移った時に直前に検出された蛍光ペンのハイライト表示の部分を元の塗りつぶしの色に戻していきます。

・うまく動作しなかったコード
Shading.BackgroundPatternColor = -553582746
(マクロの記録で確認したインデックス番号です。)
を指定して検索したのですが、全ての部分に黄色の蛍光ペンがかかってしまいました。
元の塗りつぶしの色に戻りませんでした。
Enterキーを押して次の検索を行うコードをどう表現すればいいのかわかりませんでした。
VBA初心者です。ご教授のほどよろしくお願いします。

Word VBA
コード
Sub findText()
With Selection.Find
.Font.Shading.BackgroundPatternColor = -553582746
.Execute
Selection.Range.HighlightColorIndex = wdYellow
Selection.MoveRight
End With
End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

addresshopeph

2020/09/01 15:57

・やりたいこと ⓵文書の中の特定の色で塗りつぶした語句をEnterキーを押すごとに一か所ずつ検索して、その都度蛍光ペンでハイライト表示します。 ⓶Enterキーを押して次の検索に移った時に直前に検出された蛍光ペンのハイライト表示の部分を元の塗りつぶしの色に戻していきます。 ・うまく動作しなかったコード Shading.BackgroundPatternColor = -553582746 (マクロの記録で確認したインデックス番号です。) を指定して検索したのですが、全ての部分に黄色の蛍光ペンがかかってしまいました。 元の塗りつぶしの色に戻りませんでした。 Enterキーを押して次の検索を行うコードをどう表現すればいいのかわかりませんでした。 VBA初心者です。ご教授のほどよろしくお願いします。
addresshopeph

2020/09/03 14:56

どうもありがとうございました。
guest

回答4

0

最初の回答は、背景の色が-553582746と異なる文字列は、残念ながら検索できません。
下のコードは、リボンの[ホーム]タブの[フォント]グループの[文字の網かけ]ボタンを押下して網かけした文字列を検索します。

VBA

1Sub findAmikake() 2 Selection.Range.HighlightColorIndex = wdNoHighlight 3 Selection.MoveRight 4 5 With Selection.Find 6 .ClearFormatting 7 .Font.Shading.BackgroundPatternColor = wdColorWhite 8 .Font.Shading.Texture = wdTexture15Percent 9 .Execute 10 End With 11 12 Selection.Range.HighlightColorIndex = wdYellow 13 14End Sub

この場合も網かけの濃さが異なる文字列は、残念ながら検索できません。

投稿2020/09/02 11:06

kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

addresshopeph

2020/09/03 14:56

ご回答どうもありがとうございます。 ご意見を参照していろいろと試しました。 Sub findAmikake() With Selection.Find Selection.Range.HighlightColorIndex = wdNoHighlight .Font.Shading.BackgroundPatternColor = wdColorWhite .Font.Shading.Texture = wdTexture15Percent .Execute Selection.Range.HighlightColorIndex = wdYellow End With End Sub 上記のコードで試してようやくやりたいことができるようになったのですが、最後部分の検索を行った後にマクロを実行しても、最後の部分にかかった蛍光ペンのハイライト表示は解除されませんでした。 Selection.Range.HighlightColorIndex = wdNoHighlight が実行されても条件に合わない他の蛍光ペンの部分は蛍光ペンが解除されないので Selection.Range.HighlightColorIndex = wdNoHighlight の「Range」は直前に検索された部分で蛍光ペンが付加された部分にかかっていうまくいっているるようです。 最後の部分の検索を行った後にマクロを実行して、蛍光ペンのハイライト表示のみを解除するには、 「If...Then...Else」ステートメントを使って検索結果が検出されると上記のマクロを行い、それ以外の場合は最後に検索された部分に Selection.Range.HighlightColorIndex = wdNoHighlight のみを適用する というようなコードを書けるような気がしますが、VBA初心者でうまく表現できません。 お手数をおかけしますが、さらなるご教授をお願いします。
guest

0

ベストアンサー

「Enterキーを押して」は実装できず、ショートカットキーに登録しました。
文頭にカーソルを置いてから実行します。

VBA

1Sub findText() 2 3 Selection.Range.HighlightColorIndex = wdNoHighlight 4 Selection.MoveRight 5 6 With Selection.Find 7 .ClearFormatting 8 .Font.Shading.BackgroundPatternColor = -553582746 9 .Execute 10 End With 11 12 Selection.Range.HighlightColorIndex = wdYellow 13 14End Sub

私の手元ではうまく行ってますが、いかがでしょうか。

投稿2020/09/01 20:56

kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

addresshopeph

2020/09/02 01:05

速やかなご回答どうもありがとうございます。 さっそく文書の先頭にカーソルを置いて実行させていただきましたが、カーソルが一か所ずつ右に移動していくだけで「塗りつぶし」の部分の検索も「蛍光ペン」のハイライト表示もされませんでした。 「塗りつぶし」は書式設定ですが、「蛍光ペン」は書式設定に含まれないため、「塗りつぶし」の部分に「蛍光ペン」をかけても「蛍光ペン」を解除すれば元の「塗りつぶし」の色に戻るからできるはずだと思ったのが作成したきっかけです。 「塗りつぶし」の語句を検索してその部分に「蛍光ペン」をかけて表示して、次の部分の検索実行に移ったときには直前にかけられた「蛍光ペン」の部分を解除していく.....。 できそうな気がするのですが.....。 お手数をおかけしますが、更なるご教授のほどよろしくお願いします。
kitasue

2020/09/02 01:10

色が違うのではないでしょうか。 塗りつぶした語句を選択したままの状態で、VBEのイミディエイトウィンドウで ?Selection.Font.Shading.BackgroundPatternColor と入力してEnterを押すと値はいくつですか?
kitasue

2020/09/02 01:16

ついでに、 ?Selection.Font.Shading.Texture ?Selection.Font.Shading.ForegroundPatternColor の値はいくつでしょうか。
kitasue

2020/09/02 18:30

(1) 検索対象となる「塗りつぶした語句」を選択します。 (2) 選択したまま[Alt]+[F11]を押下するとVBEの画面になります。 (3) VBEの画面で[Ctrl]+[G]を押下すると、イミディエイトウィンドウが表示されます。 (4) イミディエイトウィンドウの中で、上記の「?」で始まる3つの値を教えてください。
addresshopeph

2020/09/03 23:47

ご丁寧なご回答に心より感謝します。 ?Selection.Font.Shading.BackgroundPatternColor -553582746 ?Selection.Font.Shading.Texture 0 ?Selection.Font.Shading.ForegroundPatternColor -16777216 でした。 網掛けにして夜中を通して何度かやっているうちにkitasueさんがご教授してくださったコードがうまく動作することが確認できました。 更なる質問で申し訳ないのですが、検索途中で結果に蛍光ペンでハイライト表示された時、検索結果には選択状態の表示がかるため、表示は蛍光ペンのハイライト色ではなく、Wordの範囲選択の色になってしまいます。検索途中で個々の結果を蛍光ペンのハイライト表示状態で確認していきたいのですが、できないものでしょうか。 選択範囲がかかっていないとその部分に「Selection.Range.HighlightColorIndex = wdNoHighlight」が適用できないのはわかるのですが.....。 SelectionのRangeオブジェクトを使うと変更をした場合には、置換後の文字列は選択範囲にならず、文字列の先頭にカーソルが配置されるような気がしたのですがが、蛍光ペンでハイライト表示した後に「選択範囲がかからない」ようにして選択結果に「Selection.Range.HighlightColorIndex = wdNoHighlight」を適用して元の状態に戻していく方法はないものでしょうか。 お手数をおかけして申し訳ございませんが、更なるご教授をよろしくお願いします。
kitasue

2020/09/04 01:45

ごめんなさい。アイディアが浮かびません。
addresshopeph

2020/09/05 11:46

ご教授してくださったことに心より感謝します。 どうもありがとうございました。
guest

0

あまりいいアイディアは浮かびませんでしたが、次のコードでいかがでしょうか。
「リボンの[ホーム]タブの[フォント]グループの[文字の網かけ]ボタンを押下して網かけした文字列」
を検索します。
ヒットした文字列はハイライト表示し、選択状態は解除します。
ショートカットキーに登録し、文頭にカーソルを置いてから実行してください。

VBA

1Sub findAmikake() 2 With Selection.Find 3 .ClearFormatting 4 .Font.Shading.BackgroundPatternColor = wdColorWhite 5 .Font.Shading.Texture = wdTexture15Percent 6 If .Execute = True Then 7 If Selection.Range.HighlightColorIndex = wdYellow Then 8 Selection.Range.HighlightColorIndex = wdNoHighlight 9 If .Execute = True Then 10 Selection.Range.HighlightColorIndex = wdYellow 11 Selection.MoveLeft 12 Else 13 Selection.Range.HighlightColorIndex = wdNoHighlight 14 Selection.MoveRight 15 End If 16 Else 17 Selection.Range.HighlightColorIndex = wdYellow 18 Selection.MoveLeft 19 End If 20 Else 21 Selection.Range.HighlightColorIndex = wdNoHighlight 22 Selection.MoveRight 23 End If 24 End With 25End Sub

投稿2020/09/04 02:55

編集2020/09/06 05:51
kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

上記のコードで試してようやくやりたいことができるようになったのですが、最後部分の検索を行った後にマクロを実行しても、最後の部分にかかった蛍光ペンのハイライト表示は解除されませんでした。

いえ、ハイライト表示が解除されなかったのではなく、私の2番めの回答の

VBA

1Selection.MoveRight

をしていないので、最後の

VBA

1Selection.Range.HighlightColorIndex = wdYellow

で、再度ハイライト表示されてしまっています。

「If...Then...Else」ステートメントを使って検索結果が検出されると上記のマクロを行い、それ以外の場合は最後に検索された部分に

Selection.Range.HighlightColorIndex = wdNoHighlight
のみを適用する

これには、次のコードでいかがでしょうか。

VBA

1Sub findAmikake() 2 Selection.Range.HighlightColorIndex = wdNoHighlight 3 With Selection.Find 4 .Font.Shading.BackgroundPatternColor = wdColorWhite 5 .Font.Shading.Texture = wdTexture15Percent 6 If .Execute = True Then 7 Selection.Range.HighlightColorIndex = wdYellow 8 Else 9 Selection.Range.HighlightColorIndex = wdNoHighlight 10 End If 11 End With 12End Sub

投稿2020/09/03 19:51

編集2020/09/03 20:39
kitasue

総合スコア314

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問