連載
» 2016年01月05日 05時00分 UPDATE

VBA/マクロ便利Tips:Excelの表をWordに貼り付ける方法とWordのテキストをExcelのセルに埋め込む方法 (1/2)

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Excelで作成した表を、Wordに取り込んで表示させる方法とWordに書かれた文章をExcelのセルに表示する方法を解説する。

[薬師寺国安,PROJECT KySS]
「VBA/マクロ便利Tips」のインデックス

連載目次

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


 今回はExcelで作成した表を、Wordに取り込んで表示させる方法とWordに書かれた文章をExcelのセルに表示する方法を解説する。

 Wordの資料にExcelの表を貼り付ける必要性に迫られることは、実際の業務において多々あると思う。その際に、今回のマクロ/VBAを使うと便利ではないだろうか。Excelの表の値を急きょ変更する必要に迫られても、「リンク先の更新」で、Wordに貼り付けた表に、変更されたExcelの値を即座に反映させることができる。

 一方で、Word文書をExcelに読み込む機会はあまりないかもしれない。しかし、Excelで何らかのアンケート表を作成する場合、以前に使用していたWordの文書を、アンケート表に貼り付けたい場合も出てくる可能性がないとは言えない。こういった場合には、今回のサンプルは役に立つのではないかと思う。

Excelで作成した表を、Wordに取り込んで表示させる

 WordにExcelの表を取り込む前に、取り込むべきExcelの表を作成しておく必要がある。今回取り込む表は「K:\Excel_Word_VBA_Tips¥Excel_Word連携VBA.xlsm」ファイル内の「6年生得点」という「Sheet」に作成した、図1のような表だ。フォルダー名は各自のフォルダー名と読み替えてほしい。

図1 Wordに取り込むExcelの表

ボタンの配置

 Tips「ExcelWord連携の基本――ExcelからWordを開く、WordからExcelを起動させる」で保存しておいた、「Excel_Word連携VBA.docm」をダブルクリックしてWordを起動する。先のTipsと同じ方法で、「Excel2013起動」ボタンの下に、もう1個「CommandButton」を配置する。プロパティから「Caption」に「Excelのデータを読み込む」と指定し、「Font」を選択して、「フォント名」に「Meiryo UI」、「スタイル」に「太字」、「サイズ」に「14」と指定しておく(図2)。

図2 「Excelのデータを読み込む」用の「CommandButton」を配置した

 「CommandButton」を配置する場合は、必ず「デザインモード」にしてから配置しないと、「コマンドボタン」をクリックしても、実行モードになっており、VBE(Visual Basic Editor)が起動しないので注意してほしい。

VBEにVBAコードを記述する

 「デザインモード」の状態で、「Excelのデータを読み込む」ボタンをダブルクリックすると、VBEが起動するのでExcelのデータ(表)を読み込むコードを記述する(リスト1)。

Private Sub CommandButton2_Click()
  Dim myWord As Object
  Dim myWordDoc As Object
  Dim myExcel As Object
  
  Set myExcel = CreateObject("Excel.Application")
  Set myWord = CreateObject("Word.Application")
  myExcel.WorkBooks.Open ("K:\Excel_Word_VBA_Tips\Excel_Word連携VBA.xlsm")
  
  myExcel.Sheets("6年生得点").Range("A1:B6").Copy
  Set myWordDoc = myWord.Documents.Add
  myWord.Visible = True
  myWordDoc.ActiveWindow.Selection.PasteExcelTable True, False, False
  
  myExcel.Application.CutCopyMode = False
  Set myExcel = Nothing
  Set myWord = Nothing
  Set myWordDoc = Nothing
End Sub
リスト1 Excelのデータ(表)を読み込むコード

 Object型の変数myWordを宣言し、同じくObject型の変数、myWordDocとmyExcelを宣言しておく(2〜4行目)。

 CreateObject関数でExcel.Applicationオブジェクトへの参照を作成する(6行目)。同じくCreateObject関数でWord.Applicationオブジェクトへの参照を作成する(7行目)。

 Openメソッドで「K:\Excel_Word_VBA_Tips\Excel_Word連携VBA.xlsm」ファイルを開く(8行目)。

 フォルダー名は、各自のフォルダー名と読み替えてほしい。Excelの「6年生得点」というシートの「A1:B6」の範囲(表の範囲)をコピーする(10行目)。

Documents.Addメソッド

 Documents.Addメソッドで、新しい空のドキュメントを作成し、変数myWordDocにセットする(11行目)。

Selection.PasteExcelTableメソッド

 新しい空のドキュメントを表示する(12行目)。13行目で、Excelでコピーした表を貼り付ける。Selection.PasteExcelTableメソッドの書式は下記の通り。

Selection.PasteExcelTableメソッドの書式

Selection.PasteExcelTable(LinkedToExcel,WordFomatting,RTF)


 「LinkedToExcel(必須)」には、ブール型の値を指定する。Trueを指定すると、貼り付ける表は元のExcelの表とリンクされ、Excelの表が変更されると、Wordの表も変更される。

 今回は、Trueを指定しているので、Excelの表の値を変更すると、Wordの表にその変更が反映される。

 「WordFomatting(必須)」にはブール値を指定する。Trueを指定するとWord文書の書式が適用され、Falseを指定すると、Excelに指定していた書式が設定される。

 「RTF(必須)」にはブール値を指定する。Trueを指定すると、リッチテキストとしてExcelの表が貼り付けられ、Falseをしていると、HTML形式としてExcelの表が貼り付けられる。

Application.CutCopyModeプロパティ

 Application.CutCopyModeプロパティにFalseを指定し(15行目)、Excelの表を選択した場合に表示される、周囲の破線を解除する。

 myExcel、myWord、myWordDocの全ての関連付けを解放する(16〜18行目)。

実行結果

 では、これで実行してみよう。必ず、「デザインモード」はオフにしてボタンをクリックする。すると図3のように、Word内にExcelの表が貼り付けられる。

図3 Excelの表がWord文書に貼りついた

Wordで更新した値をすぐにExcelに反映させる方法

 それでは、図1の国語の得点を「90.5」から「95.5」に変更してみよう。Excelの表を変更する。しかし、Excelの表の国語の得点を「95.5」に変更してもリアルタイムには変更は反映されない。実際にはリアルタイムに値を反映させる方法があるので、その方法を解説しよう。

 Excelの国語の得点を変更した後、Word文書の上でマウスの右クリックをする、すると表の内容が選択状態になり、「リンク先の更新」というメニューが表示される(図4)。

図4 「リンク先の更新」メニューが表示された

 「リンク先の更新」をクリックすると、図5のように「国語」の得点が、Excelで指定した得点に変更する。

図5 国語の得点が変更した

 この方法で、Excelで変更した値がWordの表に反映されるのだが、実際には、図4のような手順を踏まなくても、Excel側で、値を更新した後に「リターンキー」をたたくだけで、リアルタイムにWordの表に、変更した値が反映されるのだ。

 メニューでも値の更新が可能であることを示すために、図4を掲載しておいた。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

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

メールマガジン登録

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