業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Excelで作成した表を、Wordに取り込んで表示させる方法とWordに書かれた文章をExcelのセルに表示する方法を解説する。
今回はExcelで作成した表を、Wordに取り込んで表示させる方法とWordに書かれた文章をExcelのセルに表示する方法を解説する。
Wordの資料にExcelの表を貼り付ける必要性に迫られることは、実際の業務において多々あると思う。その際に、今回のマクロ/VBAを使うと便利ではないだろうか。Excelの表の値を急きょ変更する必要に迫られても、「リンク先の更新」で、Wordに貼り付けた表に、変更されたExcelの値を即座に反映させることができる。
一方で、Word文書をExcelに読み込む機会はあまりないかもしれない。しかし、Excelで何らかのアンケート表を作成する場合、以前に使用していたWordの文書を、アンケート表に貼り付けたい場合も出てくる可能性がないとは言えない。こういった場合には、今回のサンプルは役に立つのではないかと思う。
WordにExcelの表を取り込む前に、取り込むべきExcelの表を作成しておく必要がある。今回取り込む表は「K:\Excel_Word_VBA_Tips¥Excel_Word連携VBA.xlsm」ファイル内の「6年生得点」という「Sheet」に作成した、図1のような表だ。フォルダー名は各自のフォルダー名と読み替えてほしい。
Tips「ExcelWord連携の基本――ExcelからWordを開く、WordからExcelを起動させる」で保存しておいた、「Excel_Word連携VBA.docm」をダブルクリックしてWordを起動する。先のTipsと同じ方法で、「Excel2013起動」ボタンの下に、もう1個「CommandButton」を配置する。プロパティから「Caption」に「Excelのデータを読み込む」と指定し、「Font」を選択して、「フォント名」に「Meiryo UI」、「スタイル」に「太字」、「サイズ」に「14」と指定しておく(図2)。
「CommandButton」を配置する場合は、必ず「デザインモード」にしてから配置しないと、「コマンドボタン」をクリックしても、実行モードになっており、VBE(Visual Basic Editor)が起動しないので注意してほしい。
「デザインモード」の状態で、「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
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メソッドで、新しい空のドキュメントを作成し、変数myWordDocにセットする(11行目)。
新しい空のドキュメントを表示する(12行目)。13行目で、Excelでコピーした表を貼り付ける。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プロパティにFalseを指定し(15行目)、Excelの表を選択した場合に表示される、周囲の破線を解除する。
myExcel、myWord、myWordDocの全ての関連付けを解放する(16〜18行目)。
では、これで実行してみよう。必ず、「デザインモード」はオフにしてボタンをクリックする。すると図3のように、Word内にExcelの表が貼り付けられる。
それでは、図1の国語の得点を「90.5」から「95.5」に変更してみよう。Excelの表を変更する。しかし、Excelの表の国語の得点を「95.5」に変更してもリアルタイムには変更は反映されない。実際にはリアルタイムに値を反映させる方法があるので、その方法を解説しよう。
Excelの国語の得点を変更した後、Word文書の上でマウスの右クリックをする、すると表の内容が選択状態になり、「リンク先の更新」というメニューが表示される(図4)。
「リンク先の更新」をクリックすると、図5のように「国語」の得点が、Excelで指定した得点に変更する。
この方法で、Excelで変更した値がWordの表に反映されるのだが、実際には、図4のような手順を踏まなくても、Excel側で、値を更新した後に「リターンキー」をたたくだけで、リアルタイムにWordの表に、変更した値が反映されるのだ。
メニューでも値の更新が可能であることを示すために、図4を掲載しておいた。
Copyright © ITmedia, Inc. All Rights Reserved.