エクセルVBAで使用するコードの備忘録。VBAで指定したWord文書内に含まれる表の値をExcelワークシートに転記するコード。
Wordファイルを開く
Wordファイルを開くにはワードファイルを操作するためのオブジェクトを作成する必要があります。作成する際のコードの書き方は参照設定を使う場合とそうでない場合で異なりますが(詳しくはこちらをご覧ください)、基本的には参照設定を使うことをお勧めします。
参照設定は以下のように、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Word XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。
パスワード付ファイルを開く方法などWordファイルを開く方法についてはこちらでも記載していますので詳しく知りたい場合はご参照ください。
Word文書の表をエクセルに転記
Word文書内に含まれる表(Table)はWord.Documentオブジェクト下のTablesオブジェクトで管理されています。文書内に複数の表が含まれる可能性が考えられるのでTablesオブジェクトは配列になっています。そのためIndex番号を使って何番目の表なのかを指定してやる必要があります。
また、Word文書内の表の値には改行文字列が含まれているため、そのまま値をエクセルに転記すると文字化けしてしまいます。そのため、エクセルに転記する際は改行文字列の一つであるChr(7)を一度空白(””)に置換してから転記します。
サンプルコード
下記のサンプルコードでは、Wordドキュメント内に含まれるIndex番目の表をエクセルに転記しています。
なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。[行番号]、[列番号]の部分には表を貼り付けたい領域の左上を示す値を入力してください。
Public Sub CopyWdTableToExcel()
'--- 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)
'--- 貼付先のワークシート ---'
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("[ワークシート名]")
'--- 表をエクセルに転記(値のみ) ---'
Dim objTable As Table
Set objTable = objDoc.Tables([Index])
Dim i As Long
Dim j As Long
For i = 1 To objTable.Rows.Count
For j = 1 To objTable.Columns.Count
ws.Cells([行番号] + i - 1, [列番号] + j - 1).Value = _
Replace(objTable.Cell(i, j).Range.Text, Chr(7), "")
Next j
Next i
'--- ワードドキュメントを閉じる ---'
objDoc.Close
End Sub