Word文書から一行ずつ・行単位で文字列を取得してメッセージボックスを表示するWordマクロをご紹介しました。
今日は、この記事のもととなった、
「excel vba word 行単位で取得」
という検索キーワードどおり、Word文書から行単位で文字列を取得する、Excelマクロ・VBA(Visual Basic for Applications)のコードをご紹介します。
Word文書から行単位で文字列を取得するサンプルマクロ
Word文書が開かれている状態で以下のExcelマクロを実行すると、先頭にワークシートが挿入され、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
サンプルマクロの解説
参照設定を行っていない環境を考え、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マクロ