Word VBA/マクロ 備忘録

作業効率化のため作成したマクロをバックアップ代わりにアップしていきます。

【Word VBA/マクロ】検索の基本構文

検索構文をまとめています。
他の基本構文はこちら
よく使用するコードはこちら

Sub 検索基本構文_Range方式()
    Dim rng As Range
    
    '文書の先頭位置にrngをセット
    Set rng = ActiveDocument.Range(0, 0)

    With rng.Find
        .Text = "検索ワード"
        
        '検索条件に書式を含める場合
        .Font
        .Frame
        .Highlight = False
        .ParagraphFormat
        .Style = "スタイル名"
        
        '検索オプションを指定
        'Trueにしたいオプション以外、記述不要
        '(Section.Findを用いる場合、Falseの記述も必要)
        .MatchCase = False '大文字と小文字を区別
        .MatchWholeWord = False '完全一致の単語を検索
        .MatchByte = False '半角と全角を区別
        '↓Trueにできるのは1つのみ
        .MatchAllWordForms = False
        .MatchSoundsLike = False 'あいまい検索(英)
        .MatchWildcards = False 'ワイルドカードを使用
        .MatchFuzzy = False 'あいまい検索(日)
        '↑ 
    
    '◆単純な置換を行う場合◆
        .Replacement.Text = "" '置換後の文字列
        .Replacement.Font.Bold = False '置換後の書式
        .Execute Replace:=wdReplaceAll 'すべて置換
     End With 

    '◆置換では対処できない複雑な処理を行う場合◆
    With rng
        Do While .Find.Execute = True            
           '処理内容を書く            
           'rngの範囲を検索結果の末尾に変更
           '(検索方法によっては別の範囲にrngを再定義)
           .SetRange .End, .End            
        Loop
    End With
End Sub
Sub 検索の基本構文_Selection方式()
    '文字カーソルを文頭に移動。
    Selection.StartOf Unit:=wdStory, Extend:=wdMove
    
    With Selection.Find
         .ClearFormatting '「.Format」がFalseの時は不要
        .Format = False
        .Text = "検索ワード"
        .Replacement.Text = ""
        .Replacement.Font
        .Forward = True

        '文書の末尾に到達した場合の設定
        .Wrap = wdFindContinue
        
        '次の4行は、Trueにする項目を最後に書く。
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchFuzzy = False
        .MatchWildcards = False
        
        '◆単純な置換の場合◆
        .Execute Replace:=wdReplaceAll
        
        '◆複雑な処理の場合◆
        With Selection
            Do While .Find.Execute = True
                '処理内容を書く
                .Collapse wdCollapseEnd '処理内容によっては省略可
            Loop
        End With
    End With
End Sub
Sub 選択範囲のみ処理する基本構文()
  Dim selRng As Range, rngInRange As Range
  Dim keyWord As String
  keyWord = "検索キーワード"
   
  Set selRng = Selection.Range
  Set rngInRange = selRng.Duplicate
  
    '選択範囲の文字列と検索ワードが一致している場合
    If selRng.Text = keyWord Then
        '処理内容を書く
        '例:検査ワードをBold指定
        selRng.Font.Bold = True
    Else
        With selRng.Find
          .ClearFormatting '「.Format」がFalseの時は不要
          .Text = keyWord
          .Replacement.Text = ""
          .Forward = True
          .Wrap = wdFindStop
          .Format = False '書式を扱う場合はTrue
          .MatchCase = False
          .MatchWholeWord = False
          .MatchByte = False
          .MatchAllWordForms = False
          .MatchSoundsLike = False
          .MatchWildcards = False
          .MatchFuzzy = False
          
          '◆複雑な処理の場合◆
          Do While .Execute
              If selRng.InRange(rngInRange) Then
                    '処理内容を書く
                    
                    selRng.SetRange selRng.End, selRng.End
                    Stop
              Else
                Exit Do
              End If
          Loop
        End With
    End If
End Sub