dポイントプレゼントキャンペーン実施中!

wordマクロについての質問です。

文書の中に2種類の特定の文字列が交互に登場するものがあります。
それらを<特定の文字列A>と<特定の文字列B>とした場合に、<特定の文字列A>から<特定の文字列B>の直前までに下線赤、同様にBからAの直前に下線青、というマクロを組みたいと考えてます。
※添付した画像の様に、左の文書を右の様にしたいです。

・選択範囲を抽出するコード(<特定の文字列A>から<特定の文字列Bの直前>を選択)
・下線効果を施すコード
を組み合わせたものを繰り返し処理させるさせるのだとは思いますが、上手くいきません。。

マクロ自体は「Aの範囲に下線赤」と「Bの範囲に下線青」のマクロは別々でも大丈夫です。
(片方教えていただければ、それを元に残りを作ります)


どなたか何卒よろしくお願いします。。。

「word VBA 文字列から文字列への選」の質問画像

A 回答 (1件)

マクロは得意ではないので、もっと良い設定で書き方などがあると


思いますが。

片方だけのマクロでもよいとのことなので、以下を試して下さい。

このマクロは特定の文字列ではなく、特定の文字のみで使用できる
マクロです。
ですから、「特定の文字列A」に対して文書内では使われていない
記号や文字を先頭に記入しておきます(置換でもよい)。
例えば「*特定の文字列A」と「+特定の文字列B」などにします。
最後にある「+特定の文字列B」以降に下線が設定されないので、
下線を設定したい範囲直後に「*」を入れておけば、その直前まで
下線を引いてくれます。

Sub キーワード直前までの文章に下線()

  Dim myRange As Range
  Dim myKW As String

  myKW = "*" ' 「*特定の文字列A」を検索するため

  If myKW = "" Then
   Exit Sub
  Else
   Set myRange = ActiveDocument.Range(0, 0)
  End If

  With myRange.Find
    .Text = myKW
  End With
  With myRange
    Do While .Find.Execute = True
    .MoveEndUntil Cset:="+" ' 「+特定の文字列B」直前
    .Select
      .Font.UnderlineColor = wdColorRed
      .Underline = wdUnderlineSingle
      .Collapse direction:=wdCollapseEnd
    Loop
  End With
  Set myRange = Nothing

End Sub

これで、赤い下線を引くことができます。
参考にしたサイト
https://ameblo.jp/gidgeerock/entry-11201806899.h …

青い下線は"+"と"*"を入れ替えて、wdColorRedをwdColorBlueに
すれば可能だと思います。

文字列の先頭に追加した記号などは、マクロの終了後に置換で削除
すれば、希望のレイアウトになっていると思いますよ。
(置換もマクロとして登録しておけば、もっと楽かも)
    • good
    • 0
この回答へのお礼

enunokokoroさん

ありがとうございます。いただいたコードの通りに行ったところ上手く動きました。
MoveEndUntil を使って文字列の指定ができればもっと楽なのになと思いましたが、無いものなんですね、、、。

お礼日時:2018/12/21 14:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!