【VBA】Word文書内の指定部分を選択する

VBAで使用するコードの備忘録。VBAでWord文書の指定部分を選択するコード。冒頭からの位置(文字数)で指定する方法や、指定した文字列の部分を選択する方法について説明します。

スポンサーリンク

Wordファイルを開く

Wordファイルを開くにはワードファイルを操作するためのオブジェクトを作成する必要があります。作成する際のコードの書き方は参照設定を使う場合とそうでない場合で異なりますが(詳しくはこちらをご覧ください)、基本的には参照設定を使うことをお勧めします。

参照設定は以下のように、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。

パスワード付ファイルを開く方法などWordファイルを開く方法についてはこちらでも記載していますので詳しく知りたい場合はご参照ください。

選択位置を冒頭からの文字数で指定する

Word文書の選択位置は、Word.Applicationオブジェクト下にあるSelectionオブジェクトのStartプロパティとEndプロパティで指定します。Startプロパティーは選択箇所の始まりの位置を、Endプロパティは選択箇所の終わりの位置を表し、冒頭からの文字数で指定します。0は文書の冒頭を表します。

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

サンプルコード(文字数で選択位置を指定)

Public Sub WordSelection1()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = New Word.Application
    objWord.Visible = True
        
    '--- 開くワードファイルのパス ---'
    Dim docPath As String
    docPath = "[ワードファイルのパス]"
    
    '--- ワードドキュメントを開く ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open(docPath)
    
    '--- 選択位置を指定する ---'
    objWord.Selection.Start = [開始位置]
    objWord.Selection.End = [終了位置]

End Sub

指定した文字列の部分を選択する

指定した文字列の部分を選択するには、Selectionオブジェクト下にあるFindオブジェクトを利用します。FindオブジェクトはWordの検索機能を利用するためのオブジェクトで、これを利用して指定した文字列を検索し該当箇所を選択します。検索をする際には、文書全体を検索できるよう、まずカーソルを冒頭部分に移動させています。該当する文字列が存在しない場合は、選択箇所は文書の冒頭から動かないので注意してください。

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

サンプルコード(指定文字列の位置を選択)

Public Sub WordSelection2()
    
    '--- Wordのアプリケーションオブジェクト ---'
    Dim objWord As Word.Application
    Set objWord = New Word.Application
    objWord.Visible = True
        
    '--- 開くワードファイルのパス ---'
    Dim docPath As String
    docPath = "[ワードファイルのパス]"
    
    '--- ワードドキュメントを開く ---'
    Dim objDoc As Word.Document
    Set objDoc = objWord.Documents.Open(docPath)
    
    '--- カーソルを冒頭に移動 ---'
    objWord.Selection.Start = 0
    objWord.Selection.End = 0
    
    '--- 文字列を検索し選択 ---'
    objWord.Selection.Find.Text = "[選択する文字列]"
    objWord.Selection.Find.Execute
    
End Sub