- ベストアンサー
ワードVBAで選択範囲内の特定単語にスタイル適用
Word2010を使用しています。 選択範囲内から、複数の単語を検索して、文字スタイルを適用するマクロを考えています。 具体的には、「選択範囲内の『one』『two』『three』という単語を検索して『文字スタイルX』を適用する」というものです。 .findだと、スタイルに対応するオブジェクトがない(?)ようなので、困っています。 マクロで可能なのか、詳しい方のご助力を願います。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>ただ選択範囲だけでなく、文章全体を検索・適応してしまいます。 >選択範囲の中だけで検索をかけるのには、どこを編集すればよいのでしょうか? 最下のVBAコードと差し換えてください。 末尾「☆」:新規で追加したコード 末尾「◆」:変更したコード それぞれコメントを追加していますので参考にしてください。 ■VBAコード Sub sample() Dim wd As Variant Dim wds As String Dim myStyle As String Dim myRange As Word.Range '☆ '選択範囲を格納 Set myRange = Selection.Range '☆ '検索する文字を指定(カンマで区切り複数入力可能) wds = "one,two,three" '適応するスタイル名を指定 myStyle = "文字スタイルX" 'スタイル適応 For Each wd In Split(wds, ",") '★ '格納した対象範囲を選択 myRange.Select '◆ '選択した範囲をFind検索 With Selection.Find .Text = wd .MatchWholeWord = True .MatchCase = True 'Find検索で一致した場合の処理 Do While .Execute '格納した範囲と検索した範囲が一致するか判定 If Selection.InRange(myRange) Then '☆ '一致した場合にスタイルを適用 Selection.Style = ActiveDocument.Styles(myStyle) End If '☆ Loop End With Next wd End Sub
その他の回答 (4)
- eden3616
- ベストアンサー率65% (267/405)
>すべての検索と適応が終わったあと、はじめの選択範囲の頭(選択範囲の近くならどこでも可)にカーソルを戻すことは可能ですか? End Sub の手前に以下のコードを追加してください。 '初期選択範囲を再選択 myRange.Select 'HOMEキーで先頭へカーソル移動 Selection.HomeKey Unit:=wdLine
- eden3616
- ベストアンサー率65% (267/405)
スタイル「文字スタイルX」はマクロ実行前に作成して下さい。 最下のVBAコードを標準モジュールへ張り付けて、「sample」プロシージャを実行してください。 コード内の「検索する文字を指定」と「適応するスタイル名を指定」を設定してください。 カンマを区切り文字として利用しています。 対象の検索キーにカンマ「,」を含めたい場合は末尾「'★」の行でカンマ指定「","」を検索ワードに含まない文字で指定してください。 ■VBAコード Sub sample() Dim wd As Variant Dim wds As String Dim myStyle As String '検索する文字を指定(カンマで区切り複数入力可能) wds = "one,two,three" '適応するスタイル名を指定 myStyle = "文字スタイルX" 'スタイル適応 For Each wd In Split(wds, ",") '★ Selection.WholeStory With Selection.Find .Text = wd .MatchWholeWord = True .MatchCase = True Do While .Execute Selection.Style = ActiveDocument.Styles(myStyle) Loop End With Next wd End Sub
補足
回答ありがとうございます。 検索とスタイル適応はこれで想定通りの動きをしてくれました。 ただ選択範囲だけでなく、文章全体を検索・適応してしまいます。 選択範囲の中だけで検索をかけるのには、どこを編集すればよいのでしょうか? よろしくご指導お願いいたします。
- eden3616
- ベストアンサー率65% (267/405)
No1です。失礼しました。wordですね。 検索方法は異なるかと思いますが、書式置換までの方法は似たようなものかと思います。 雑な回答で申し訳ありませんが、VBAコードを参考にしてみてください。 ちなみに、手動で普通にできるので、マクロ登録で可能かもしれません。 ▼参考「検索と置換を使用して文字列の書式を設定するには」 http://www.wanichan.com/pc/word/2013/2/11.html
補足
回答ありがとうございます。 ExcelとWordでは、かなり仕様が異なるかと思います。 ExcelVBAに明るくないのもあり、この方法だと難しいです。 あと、スタイルをロックした文書での運用を想定していますので、 フォントやサイズなどそれぞれ指定する形式ではなく、文字スタイルでの適用手段を必要としています。
- eden3616
- ベストアンサー率65% (267/405)
以前に多様なものを作った気がします。。。 選択範囲のセル内の文字をすべて検索して、文字列単位で書式を設定します。 一回の投稿でコードを記述できないため、ファイルを外部サイトにアップロード致します。 ▼ダウンロード https://www.dropbox.com/s/j4vmtbp833erkpk/%E3%82%BB%E3%83%AB%E5%86%85%E6%9B%B8%E5%BC%8F%E7%BD%AE%E6%8F%9B.xls?dl=0 添付画像を参考ください。
お礼
回答ありがとうございました! 完璧です。 お忙しい中、ご助力賜りまして誠にありがとうございます。 おかげさまで作業が大きく進みそうです。 本当に助かりました。 また機会がありましたらよろしくお願いいたします。
補足
回答ありがとうございます! 質問にあったやりたい事はこれですべて実現できました。 あと1点、これは質問にはない事項なのですが、 すべての検索と適応が終わったあと、はじめの選択範囲の頭(選択範囲の近くならどこでも可)にカーソルを戻すことは可能ですか? ご提案頂いたコードだと、全文を検索して最後にヒットした単語のところにカーソルがいってしまうので。 たびたびお手数をおかけしますが、お時間の許す限りお付き合い頂けると幸いです。