Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Word文書から一行ずつ行単位で文字列を取得するExcelマクロ

Word文書から一行ずつ行単位で文字列を取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

Word文書から一行ずつ・行単位で文字列を取得してメッセージボックスを表示するWordマクロをご紹介しました。

今日は、この記事のもととなった、
「excel vba word 行単位で取得」
という検索キーワードどおり、Word文書から行単位で文字列を取得する、Excelマクロ・VBA(Visual Basic for Applications)のコードをご紹介します。

[スポンサードリンク]

Word文書から行単位で文字列を取得するサンプルマクロ

Word文書が開かれている状態で以下のExcelマクロを実行すると、先頭にワークシートが挿入され、Word文書の文字列を一行ずつ取得して書き出されます。

Sub Word文書の文字列を一行ずつ取得する()

 Const wdPrintView = 3
 Const wdTextRectangle = 0

 Dim wd_app As Object ' Word.Application
 Dim win As Object   ' Word.Window
 Dim pg As Object    ' Word.Page
 Dim rc As Object    ' Word.Rectangle
 Dim ln As Object    ' Word.Line
 Dim r As Long     ' 文字列を書き出すExcelの行番号

 On Error GoTo ERR_HNDL

 Set wd_app = GetObject(Class:="Word.Application")
 Set win = wd_app.ActiveWindow
 win.View.Type = wdPrintView

 Sheets.Add Before:=Sheets(1)
 r = 1
 For Each pg In win.ActivePane.Pages
  For Each rc In pg.Rectangles
   For Each ln In rc.Lines
     If rc.RectangleType = wdTextRectangle Then
      Cells(r, "A").Value = ln.Range.Text
      r = r + 1
     End If
   Next ln
  Next rc
 Next pg

 GoTo END_TASK

ERR_HNDL:
 MsgBox "エラーが発生したためマクロを終了します。"
 Err.Clear
 GoTo END_TASK

END_TASK:
 Set wd_app = Nothing

End Sub

サンプルマクロの解説

参照設定を行っていない環境を考え、Word VBAの定数と同じ名前で定数を宣言して、
 Const wdPrintView = 3
 Const wdTextRectangle = 0
オブジェクト変数はすべてObjectで宣言しています。
 Dim wd_app As Object ' Word.Application
 Dim win As Object   ' Word.Window
 Dim pg As Object    ' Word.Page
 Dim rc As Object    ' Word.Rectangle
 Dim ln As Object    ' Word.Line

ワークシートを挿入する処理と、
 Sheets.Add Before:=Sheets(1)
ループの中にある、文字列をセルに書き出す代入文、
      Cells(r, "A").Value = ln.Range.Text
の左辺だけが、Excelのオブジェクト式で、他はすべてWordのオブジェクト式です。

Word文書から行単位で文字列を取得するメインの処理は、先日ご紹介したWordマクロと同じですから、上記マクロの意味がわからないという方は、まずはWordマクロを完全に理解してください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » Word文書から一行ずつ行単位で文字列を取得するExcelマクロ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.