【VBA】ワードファイルの指定した文字列の間を削除する

エクセルVBAで使うコードの備忘録。VBAでワードファイルを操作して、指定した二つの文字列の間を削除するコード。

スポンサーリンク

事前準備

VBAでワードファイルを操作するには、参照設定が必要です。VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れておきます。

指定した文字列の間を削除する

下記のサンプルプログラムでは、指定した二つの文字列(strStartとstrEnd)の間をすべて削除します。プログラムの手順としては、まず指定文字列を検索して開始位置(strStartの頭)と終了位置(strEndの末尾)を取得します。ここで指定する文字列は文書中には一つしかないと仮定しています。実際に使う場合には、特殊な記号を組み合わせた文字列(例えば@から始まる文字列で絶対に文書中に使わないもの)などをうまく使い、ユニークに削除ヶ所を指定できるようにするとよいです。開始位置と終了位置が取得できたら、Selection.SetRangeでその範囲を選択してDeleteします。

なお、サンプルコードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

サンプルコード

Public Sub DeleteBetweenStrs()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True
    
    '--- ドキュメントオブジェクト ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open("[ワードファイルのパス]")
    
    '--- 開始位置の文字列 ---'
    Dim strStart As String
    strStart = "[開始位置の文字列]"
    
    '--- 終了位置の文字列 ---'
    Dim strEnd As String
    strEnd = "[終了位置の文字列]"
    
    '--- 開始位置・終了位置を格納する変数 ---'
    Dim rangeStart As Long
    Dim rangeEnd As Long
    
    '--- 検索用のFindオブジェクト ---'
    Dim objFind As Word.Find
    Set objFind = objWord.Selection.Find
    objFind.ClearFormatting
    
    '--- strStartを検索し開始位置を取得 ---'
    Call objFind.Execute(findtext:=strStart)
    rangeStart = objWord.Selection.Range.Start
    
    objWord.Selection.Collapse
    
    '--- strEndを検索し終了位置を取得 ---'
    Call objFind.Execute(findtext:=strEnd)
    rangeEnd = objWord.Selection.Range.End
    
    '--- 開始位置から終了位置を選択し削除 ---'
    Call objWord.Selection.SetRange(rangeStart, rangeEnd)
    objWord.Selection.Delete
    
    '--- ドキュメントを閉じる ---'
    objDoc.Close
    
    '--- ワードを閉じる ---'
    objWord.Quit
    
End Sub