ExcelグラフをPasteSpecialメソッドでWordに貼り付けるVBA/マクロ便利Tips

業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Excelで作成したグラフを、Selection.PasteSpecialメソッドでWordに取り込んで表示させる方法と、ParagraphFormat.Alignmentプロパティを紹介。

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

連載目次

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


 今回はExcelの「グラフ」というシートに作成された、表とグラフを、Wordに読み込み表示させる方法を解説する。使用するExcelのファイルは、これまでの連載で使用してきた、「K:\Excel_Word_VBA_Tips\Excel_Word連携VBA.xlsm」だ。フォルダは各自が保存しているフォルダと読み替えてほしい。

ExcelのグラフをWordに貼り付ける準備

 「Excel_Word連携VBA.xlsm」をダブルクリックしてExcelを起動し、「グラフ」という新しいシートを作成する。そのシートの中に図1のような表とグラフと「表とグラフをWordに貼り付ける」ボタンを作成しておく。

図1 「グラフ」シート内に作成した表とグラフとボタン

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

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

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

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

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

Sub 表とグラフをWordに貼り付ける()
  Dim myWord As Object
  Dim myWordDoc As Object
  Set myWord = CreateObject("Word.Application")
  
  With myWord
    Set myWordDoc = .Documents.Add
    .Visible = True
  End With
  
  Worksheets("グラフ").Range("A1:B6").Copy
  
On Error GoTo myError
 
  myWordDoc.ActiveWindow.Selection.PasteExcelTable False, False, False
 
  Worksheets("グラフ").ChartObjects(1).Copy
 
  With myWord
    .Selection.PasteSpecial Placement:=wdInLine, DataType:=wdPasteMetafilePicture
    .Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
  End With
 
  Set myWord = Nothing
  Set myWordDoc = Nothing
  Exit Sub
myError:
  MsgBox "クリップボードに何もありません。やりなおしてください。"
  Exit Sub
End Sub
リスト1 表とグラフをWordに貼り付けるコード

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

 Object型の変数「myWord」「myWordDoc」を宣言する(2〜3行目)。

 CreateObject関数で「Word.Application」オブジェクトへの参照を作成し、変数myWordにセットする(4行目)。

 Document.Addで新しいWord文書を追加し、VisibleプロパティにTrueを指定して、表示する(6〜9行目)。

 Excelの「グラフ」シートの表を表示しているセル「A1:B6」をコピーする(11行目)。

 クリップボードにうまくコピーできなかった場合のためにエラー処理を行っておく。13行目で「On Error GoTo myError」で、エラーが発生した場合は、27行目のmyErrorラベル以降を実行する。myErrorラベル内では、警告メッセージを出して処理を抜けている(28〜29行目)。

 15行目では、「Selection.PasteExcelTable」メソッドで表を貼り付けている。書式については、Tips「Excelの表をWordに貼り付ける方法とWordのテキストをExcelのセルに埋め込む方法」を参照してほしいが、このTipsと異なり、今回は引数「LinkedToExcel」にFalseを指定している。

Worksheets.ChartObjectsコレクション

 次に、17行目で、「グラフ」シートに作成された、グラフをコピーする。

 ChartObjectsは、ワークシートにある全てのChartObjectのコレクションだ。ChartObjectとはワークシートの埋め込みグラフを表す。今回は、「グラフ」シートに1個のグラフしか作成されていないので、ChartObjectsコレクションのインデックスに「1」を指定している。

Selection.PasteSpecialメソッド

 次に、20行目のSelection.PasteSpecialで、クリップボードの内容を挿入する。

 Selection.PasteSpecialメソッドの書式は下記の通りだ。今回使用した名前付引数のみ解説しておく。これらはいずれも省略が可能だ。

Selection.PasteSpecialメソッドの書式

Selection.PasteSpecial Placement:={表1の値},DataType:={表2の値}


 今回はPlacementには、wdInLineを使用している。

表1 Placementに指定する値
名前 説明
wdFloatOverText 位置を固定しない
wdInLine 行内
参考「WdOLEPlacement 列挙(Word)(機械翻訳)

 DataTypeには、クリップボードの内容を文書に挿入する際の書式を指定する。今回は、「wdPasteMetafilePicture」を使用している。

表2 DataTypeに指定する値
名前 説明
wdPasteBitmap ビットマップ
wdPasteDeviceIndependentBitmap デバイスに依存しないビットマップ
wdPasteEnhancedMetafile 拡張メタファイル
wdPasteHTML HTML
wdPasteHyperlink ハイパーリンク
wdPasteMetafilePicture メタファイル
wdPasteOLEObject OLEオブジェクト
wdPasteRTF リッチテキスト形式
wdPasteShape 図形
wdPasteText 文字列
参考「WdPasteDataType 列挙(Word)(機械翻訳)

Selection.ParagraphFormat.Alignmentプロパティ

 次に、21行目で、表やグラフを左ぞろえに設定している。

 右ぞろえは「wdAlignParagraphRight」、中央ぞろえは「dAlignParagraphCenter」、左ぞろえは「wdAlignParagraphLeft」となる。

実行結果

 リスト1を図1のボタンに関連付け実行すると、図2のように表示される。

図2 Excelの表とグラフがWord文書に貼り付けられた

全て何が何でもVBAで片付ける必要はない

 今回は、これで終わりだ。今回はクリップボード経由で表やグラフをWordに貼り付けている。最後にクリップボードにコピーされたグラフは、ペーストできるものになら、何にでもペーストが可能だ。結構便利だと思う。

 Excelで作成した表やグラフをWord文書の中で利用することは、実務において大変に多いのではないかと思う。そんな場合には、このサンプルのように、WordにExcelの表やグラフを一発で貼り付けられるのは大変に有益で便利ではないだろうか。貼り付けた後の、レイアウトなどはWordのメニューから行えばいいと思う。全て何が何でも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.

RSSについて

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

メールマガジン登録

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