【VBA】Wordのテーブル内の値を取得して、Excel内で検索する方法|InStr関数で検索位置を特定する

目次

経緯

Wordには、Excelのように「A1」や「F6」といったセルアドレスの概念がありません。
そのため、Wordのテーブル内の特定位置にあるデータを取り出し、それをExcelの中で検索する方法を調べてみました。

結果として、Wordのテーブルの位置を (行,列) で指定し、取得した値を InStr() 関数でExcel内のデータと照合することで、目的を達成できました。


今回やりたいこと

  • Wordのテーブル(2,2) にある値を取得
  • その値がExcelの1行目・A列〜Z列のどこかに含まれているかを調べる
  • 含まれているセルのアドレスをメッセージボックスで表示する

使用するVBAコード(Word側)

以下が実際に使用したコードです。Wordのマクロとして実行します。

Sub SearchExcelFromWord()

    Dim xlApp As Object
    Dim xlBook As Object
    Dim xlSheet As Object
    Dim folderPath As String
    Dim fileName As String
    Dim searchValue As String
    Dim cell As Object
    Dim found As Boolean
    Dim doc As Document
    Dim tbl As Table
    Dim col As Integer

    Set doc = ActiveDocument
    Set tbl = doc.Tables(1)

    ' (2,2)のセルのテキストを取得し、改行や末尾文字を除去
    searchValue = tbl.Cell(2, 2).Range.Text
    searchValue = Replace(searchValue, vbCr, "")
    searchValue = Left(searchValue, Len(searchValue) - 1)

    Set xlApp = CreateObject("Excel.Application")
    folderPath = "C:\Users\mori\デスクトップ\"
    fileName = Dir(folderPath & "*.xlsx")

    If fileName = "" Then
        MsgBox "フォルダ内にExcelファイルが見つかりませんでした。"
        Exit Sub
    End If

    Set xlBook = xlApp.Workbooks.Open(folderPath & fileName)
    Set xlSheet = xlBook.Sheets(1)

    found = False

    For col = 1 To 26
        If InStr(1, xlSheet.Cells(1, col).Value, searchValue) > 0 Then
            MsgBox "Found at " & xlSheet.Cells(1, col).Address(0, 0)
            found = True
            Exit For
        End If
    Next col

    If Not found Then
        MsgBox "Value not found"
    End If

    xlBook.Close SaveChanges:=False
    xlApp.Quit

    Set xlSheet = Nothing
    Set xlBook = Nothing
    Set xlApp = Nothing
    Set tbl = Nothing
    Set doc = Nothing

End Sub

補足:このコードのポイント

  • tbl.Cell(2,2).Range.Text でWordのテーブルからセル値を取得します
  • InStr() 関数を使い、Excel側のセル値に対して「部分一致」で検索を行っています
  • 値の末尾に付く改行や制御文字を削除しておかないと、比較が失敗します

応用可能なシーン

  • WordにあるデータとExcelマスタを突き合わせて存在チェックをしたいとき
  • Wordに入力されたIDやコードを使って関連データを抽出したいとき
  • Wordをフロント、Excelをデータベースのように使いたいとき

まとめ

Wordのテーブルの値を取得し、Excel内で検索するには、座標指定(Cell(row, col))+ 文字列操作 + InStr()関数が有効です。
このようにVBAを組み合わせることで、異なるOfficeアプリ間の連携が可能となります。

実務でも十分に活用できる内容ですので、ぜひ試してみてください。
最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次