Tableオブジェクトを使って、Wordの表をExcelに貼り付けるVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Wordの「表」を表すTableオブジェクトを参照、コピーしてのExcelのシート上に貼り付ける方法を紹介する。

» 2016年03月03日 05時00分 公開
[薬師寺国安PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

※本Tipsの環境:Windows 8.1 Enterprise(64ビット)+Excel 2013+Word 2013

 今回はWordで作成された表をExcelに取り込む方法を解説する。Tips「Excelの表をWordに貼り付ける方法とWordのテキストをExcelのセルに埋め込む方法」で「Excelのデータ(表)をWordに取り込む」方法を解説しているが、その逆だ。

 今回はあらかじめWordで図1のような表を作成し、任意のフォルダに「役職表.docx」として保存しておく。筆者の場合は「K:\Excel_Word_VBA_Tips\役職表.docx」として保存している文書を使用する。

図1 Wordで作成した「役職表.docx」

Wordの表をExcelに貼り付ける準備

 「Excel_Word連携VBA.xlsm」をダブルクリックしてExcelを起動し、「Wordの表をExcelに読み込む」という新しいシートを作成する。そのシートの中に図2のような「Wordの表を読み込む」ボタンを作成しておく。

図2 「Wordの表をExcelに読み込む」シート内に作成したボタン

 「ボタン」は、Excelメニューの「挿入」→「図形」と選択して、「角丸四角形」を配置し、これを選択して、マウスの右クリックで表示されるメニューから、「テキストの編集」を選択して、「Wordに書き出す」と指定する。

 「フォント」には「Meiryo UI」、「フォントサイズ」には「14」、「フォント太さ」には「太字」、「文字位置」には「中央揃え」を指定しておく。

 筆者の場合は、ボタンに「図形」の「角丸四角形」を使用していたのだが、必ずしもこの「角丸四角形」を「ボタン」として使用しなければならないわけではない。Excelメニューの「開発」項目の中に「挿入」という項目があり、「▼」アイコンをクリックすると、図3のように「フォームコントロール」が表示される。この中にある「ボタン」を使ってマクロと関連付けても問題はない。一度使って試してみるといいだろう。

図3 フォームコントロールが表示された

 次に、Excelメニューの「開発」メニューをクリックして、左端に表示される「Visual Basic」を選択してVBE(Visual Basic Editor)を起動する。

VBEにVBAのコードを記述する

 プロジェクト内に既にModule1が追加されているので、この中にリスト1のコードを記述する。

  1. Sub Wordの表をExcelに読み込む()
  2. Dim myWord As New Word.Application
  3. Dim myWordDoc As Word.Document
  4. Dim myData As String
  5. Dim As Integer
  6. Dim As Integer
  7. Set myWordDoc = myWord.Documents.Open("K:\Excel_Word_VBA_Tips\役職表.docx")
  8. With myWordDoc.Tables(1)
  9. For = 1 To .Rows.Count
  10. For = 1 To .Columns.Count
  11. myData = Replace(.Cell(行, 列).Range.Text, Chr(7), "")
  12. If IsNumeric(myData) = True Then
  13. Cells(行, 列).Value = CLng(myData)
  14. Else
  15. Cells(行, 列).Value = myData
  16. End If
  17. Next
  18. Next
  19. End With
  20. myWordDoc.Close
  21. Set myWordDoc = Nothing
  22. myWord.Quit
  23. Set myWord = Nothing
  24. Range("A1:C1").Interior.ColorIndex = 15
  25. Range("A1:C6").Borders.LineStyle = xlContinuous
  26. Range("A1:C6").Font.Name = "Meiryo UI"
  27. Range("A1:C6").Font.Size = 12
  28. End Sub
リスト1 Wordの表をExcelに読み込むコード

 以降、コードの中身を解説する。

 Word.Applicationの新しいインスタンスmyWord、Word.Document型の変数myWordDocを宣言する(2~3行目)。

 文字列型の変数myDataを宣言し、Integer型の「行」と「列」という変数を宣言しておく(4~6行目)。

 Documents.Openメソッドで任意のフォルダにある「役職表.docx」を開く(7行目)。

Wordの表を表すTableオブジェクト

 WordのTablesコレクションはWordの「表」を表すオブジェクト「Table」の集まりだ。その1つに対して10~19行目の処理を行う。

 Wordの表の行の数だけ繰り返しながら、さらにWordの表の列の個数だけ繰り返す2重のループ処理処理を行う。その中で行うのは、12~17行目の処理だ。

Wordの「改行」を「Chr」関数で取得して削除しながらExcelの各セルに表示

 変数myDataには、Replace関数で、「改行」の文字列(「Chr(7)」で取得できる)を空白に置換した値を格納する(12行目)。

 Wordの表のテキストには「改行」がくっついていて、何もしないとTextプロパティで値を取得した際に、末尾に文字化けして「・」のようなものが表示される(図4)。これを削除するためにVBAの「Chr」関数を使っている。

図4 各テキストの末尾に「・」のようなものが入る

 変数myDataの値が数値なら(13行目)、CLng関数でLong型に変換したmyDataの値をExcelの各セルに表示し(14行目)、そうでない場合は(15行目)、単にmyDataが格納している文字列型のデータをExcelの各セルに表示する(16行目)。

見た目もWordの表っぽくする

 22~25行目では、myWordDocオブジェクトを閉じ、全ての関連付けから解放する。またmyWordオブジェクを終了し、全ての関連付けから解放している。

 最後に27~30行目で、Excel内に表示された表に書式を設定し、Wordの表と同じ見た目にしている。

実行結果

 リスト1を図2のボタンに関連付け実行すると、Excelの「Wordの表をExcelに読み込む」シート内にWordの表が読み込まれる(図5)。

図5 Wordの表がExcelに読み込まれた

 以前も書いたが、必ず「役職名.docx」は開いた状態にしておかないよう注意してほしい。



 Wordの表をExcelに読み込む場面は多いことだろう。このサンプルを参考にして、各自がいろいろアレンジし、自分なりの使い勝手の良いVBAアプリを作っていただけるとうれしい限りだ。

著者紹介

薬師寺 国安(やくしじ くにやす) / 薬師寺国安事務所

薬師寺国安事務所代表。Visual Basicプログラミングと、マイクロソフト系の技術をテーマとした、書籍や記事の執筆を行う。

1950年生まれ。事務系のサラリーマンだった40歳から趣味でプログラミングを始め、1996年より独学でActiveXに取り組む。

1997年に薬師寺聖とコラボレーション・ユニット「PROJECT KySS」を結成。

2003年よりフリーになり、PROJECT KySSの活動に本格的に参加。.NETやRIAに関する書籍や記事を多数執筆する傍ら、受託案件のプログラミングも手掛ける。

Windows Phoneアプリ開発を経て、現在はWindowsストアアプリを多数公開中。

Microsoft MVP for Development Platforms - Client App Dev (Oct 2003-Sep 2012)。

Microsoft MVP for Development Platforms - Windows Phone Development(Oct 2012-Sep 2013)。

Microsoft MVP for Development Platforms - Client Development(Oct 2013-Sep 2014)。

Microsoft MVP for Development Platforms - Windows Platform Development (Oct 2014-Sep 2015)。

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

Coding Edge 記事ランキング

本日月間

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。