• ベストアンサー

ワードVBAで選択範囲内の特定単語にスタイル適用

Word2010を使用しています。 選択範囲内から、複数の単語を検索して、文字スタイルを適用するマクロを考えています。 具体的には、「選択範囲内の『one』『two』『three』という単語を検索して『文字スタイルX』を適用する」というものです。 .findだと、スタイルに対応するオブジェクトがない(?)ようなので、困っています。 マクロで可能なのか、詳しい方のご助力を願います。

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

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.4

>ただ選択範囲だけでなく、文章全体を検索・適応してしまいます。 >選択範囲の中だけで検索をかけるのには、どこを編集すればよいのでしょうか? 最下の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

chiku_sho
質問者

補足

回答ありがとうございます! 質問にあったやりたい事はこれですべて実現できました。 あと1点、これは質問にはない事項なのですが、 すべての検索と適応が終わったあと、はじめの選択範囲の頭(選択範囲の近くならどこでも可)にカーソルを戻すことは可能ですか? ご提案頂いたコードだと、全文を検索して最後にヒットした単語のところにカーソルがいってしまうので。 たびたびお手数をおかけしますが、お時間の許す限りお付き合い頂けると幸いです。

その他の回答 (4)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.5

>すべての検索と適応が終わったあと、はじめの選択範囲の頭(選択範囲の近くならどこでも可)にカーソルを戻すことは可能ですか? End Sub の手前に以下のコードを追加してください。 '初期選択範囲を再選択 myRange.Select 'HOMEキーで先頭へカーソル移動 Selection.HomeKey Unit:=wdLine

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

スタイル「文字スタイル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

chiku_sho
質問者

補足

回答ありがとうございます。 検索とスタイル適応はこれで想定通りの動きをしてくれました。 ただ選択範囲だけでなく、文章全体を検索・適応してしまいます。 選択範囲の中だけで検索をかけるのには、どこを編集すればよいのでしょうか? よろしくご指導お願いいたします。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

No1です。失礼しました。wordですね。 検索方法は異なるかと思いますが、書式置換までの方法は似たようなものかと思います。 雑な回答で申し訳ありませんが、VBAコードを参考にしてみてください。 ちなみに、手動で普通にできるので、マクロ登録で可能かもしれません。 ▼参考「検索と置換を使用して文字列の書式を設定するには」 http://www.wanichan.com/pc/word/2013/2/11.html

chiku_sho
質問者

補足

回答ありがとうございます。 ExcelとWordでは、かなり仕様が異なるかと思います。 ExcelVBAに明るくないのもあり、この方法だと難しいです。 あと、スタイルをロックした文書での運用を想定していますので、 フォントやサイズなどそれぞれ指定する形式ではなく、文字スタイルでの適用手段を必要としています。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

以前に多様なものを作った気がします。。。 選択範囲のセル内の文字をすべて検索して、文字列単位で書式を設定します。 一回の投稿でコードを記述できないため、ファイルを外部サイトにアップロード致します。 ▼ダウンロード 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 添付画像を参考ください。

chiku_sho
質問者

お礼

回答ありがとうございました! 完璧です。 お忙しい中、ご助力賜りまして誠にありがとうございます。 おかげさまで作業が大きく進みそうです。 本当に助かりました。 また機会がありましたらよろしくお願いいたします。