検索
連載

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

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

Share
Tweet
LINE
Hatena
「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のコードを記述する。

Sub Wordの表をExcelに読み込む()
  Dim myWord As New Word.Application
  Dim myWordDoc As Word.Document
  Dim myData As String
  Dim 行 As Integer
  Dim 列 As Integer
  Set myWordDoc = myWord.Documents.Open("K:\Excel_Word_VBA_Tips\役職表.docx")
  
  With myWordDoc.Tables(1)
    For 行 = 1 To .Rows.Count
      For 列 = 1 To .Columns.Count
        myData = Replace(.Cell(行, 列).Range.Text, Chr(7), "")
        If IsNumeric(myData) = True Then
          Cells(行, 列).Value = CLng(myData)
        Else
          Cells(行, 列).Value = myData
        End If
      Next
    Next
  End With
  
  myWordDoc.Close
  Set myWordDoc = Nothing
  myWord.Quit
  Set myWord = Nothing
  
  Range("A1:C1").Interior.ColorIndex = 15
  Range("A1:C6").Borders.LineStyle = xlContinuous
  Range("A1:C6").Font.Name = "Meiryo UI"
  Range("A1:C6").Font.Size = 12
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.

ページトップに戻る