業務効率化に役立つVBA/マクロのさまざまなTipsをコード例を交えて紹介していきます。今回は、Excelで作成したグラフを、Selection.PasteSpecialメソッドでWordに取り込んで表示させる方法と、ParagraphFormat.Alignmentプロパティを紹介。
今回はExcelの「グラフ」というシートに作成された、表とグラフを、Wordに読み込み表示させる方法を解説する。使用するExcelのファイルは、これまでの連載で使用してきた、「K:\Excel_Word_VBA_Tips\Excel_Word連携VBA.xlsm」だ。フォルダは各自が保存しているフォルダと読み替えてほしい。
「Excel_Word連携VBA.xlsm」をダブルクリックしてExcelを起動し、「グラフ」という新しいシートを作成する。そのシートの中に図1のような表とグラフと「表とグラフをWordに貼り付ける」ボタンを作成しておく。
「ボタン」は、Excelメニューの「挿入」→「図形」と選択して、「角丸四角形」を配置し、これを選択して、マウスの右クリックで表示されるメニューから、「テキストの編集」を選択して、「表とグラフをWordに貼り付ける」と指定する。
「フォント」には「Meiryo UI」、「フォントサイズ」には「14」、「フォント太さ」には「太字」、「文字位置」は「中央揃え」を指定しておく。
次に、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
以降、コードの中身を解説する。
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を指定している。
次に、17行目で、「グラフ」シートに作成された、グラフをコピーする。
ChartObjectsは、ワークシートにある全てのChartObjectのコレクションだ。ChartObjectとはワークシートの埋め込みグラフを表す。今回は、「グラフ」シートに1個のグラフしか作成されていないので、ChartObjectsコレクションのインデックスに「1」を指定している。
次に、20行目のSelection.PasteSpecialで、クリップボードの内容を挿入する。
Selection.PasteSpecialメソッドの書式は下記の通りだ。今回使用した名前付引数のみ解説しておく。これらはいずれも省略が可能だ。
Selection.PasteSpecial Placement:={表1の値},DataType:={表2の値}
今回はPlacementには、wdInLineを使用している。
名前 | 説明 |
---|---|
wdFloatOverText | 位置を固定しない |
wdInLine | 行内 |
参考「WdOLEPlacement 列挙(Word)(機械翻訳)」 |
DataTypeには、クリップボードの内容を文書に挿入する際の書式を指定する。今回は、「wdPasteMetafilePicture」を使用している。
名前 | 説明 |
---|---|
wdPasteBitmap | ビットマップ |
wdPasteDeviceIndependentBitmap | デバイスに依存しないビットマップ |
wdPasteEnhancedMetafile | 拡張メタファイル |
wdPasteHTML | HTML |
wdPasteHyperlink | ハイパーリンク |
wdPasteMetafilePicture | メタファイル |
wdPasteOLEObject | OLEオブジェクト |
wdPasteRTF | リッチテキスト形式 |
wdPasteShape | 図形 |
wdPasteText | 文字列 |
参考「WdPasteDataType 列挙(Word)(機械翻訳)」 |
次に、21行目で、表やグラフを左ぞろえに設定している。
右ぞろえは「wdAlignParagraphRight」、中央ぞろえは「dAlignParagraphCenter」、左ぞろえは「wdAlignParagraphLeft」となる。
リスト1を図1のボタンに関連付け実行すると、図2のように表示される。
今回は、これで終わりだ。今回はクリップボード経由で表やグラフを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.