VBA練習問題
VBA100本ノック 79本目:Wordにセル範囲を図として挿入

VBAを100本の練習問題で鍛えます
公開日:2021-02-01 最終更新日:2021-02-22

VBA100本ノック 79本目:Wordにセル範囲を図として挿入


Word文書に、シートのセル範囲をリンクしない図として挿入する問題です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータは、VBA100本ノックの目次ページ からもダウンロードできます。
マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています。エクセル関数・機能・基本操作の入門解説からマクロVBAまでエクセル全般を網羅しています。


出題

出題ツイートへのリンク

#VBA100本ノック 79本目
ブックと同一フォルダにdoc1.docxがあります。
ブックマーク「エクセル表」の位置から、
・ブック名
・シート名
・A1セルからの表をリンクしない図で貼り付け
同一フォルダに「doc1_yyyymmdd.docx」で保存してWord終了してください。
※完成は画像を参照
※シートは任意

マクロ VBA 100本ノック

マクロ VBA 100本ノック


サンプルファイルです。
https://excel-ubara.com/vba100sample/VBA100_79.xlsm
https://excel-ubara.com/vba100sample/doc1.docx
https://excel-ubara.com/vba100sample/VBA100_79.zip


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

基本的な考え方は「71本目:パワーポイントへグラフを貼り付け」と同じになります。
Wordには「マクロの記録」があるので、やりやすい面もあると思います。
ブックマークの操作さえわかれば、ブックマークへのジャンプと文字列を書き込む部分は、ほぼマクロの記録のまま使えます。

Sub VBA100_80_01()
  Dim wb As Workbook: Set wb = ThisWorkbook
  Dim ws As Worksheet: Set ws = wb.ActiveSheet
  
  Dim objWord As Word.Application, objDoc As Word.Document
  Set objWord = CreateObject("Word.Application")
  Set objDoc = objWord.Documents.Open(wb.Path & "\doc1.docx")
  
  objDoc.Bookmarks("エクセル表").Select
  objWord.Selection.TypeText ws.Parent.Name & vbVerticalTab
  objWord.Selection.TypeText ws.Name & vbCr
  
  ws.Range("A1").CurrentRegion.Copy
  objWord.Selection.PasteSpecial Link:=False, DataType:=wdPasteEnhancedMetafile, Placement:=wdInLine
  Application.CutCopyMode = False
  
  objDoc.SaveAs2 Replace(objDoc.FullName, ".docx", Format(Date, "_yyyymmdd") & ".docx")
  objDoc.Close SaveChanges:=False
  objWord.Quit
  Set objWord = Nothing
End Sub


Wordでは改行と改段落の違いがあり悩ましいところです。
サンプル画像ではブック名の後は改行、シート名の後ろは改段落にしていて、上記VBAでは書き分けています。
図として貼り付ける場合のDataType等については記事補足に記載しました。


補足

ブックマークはオブジェクトなので、これを見つけた後はいろいろな書き方ができます。

Dim bm As Bookmark
Set bm = objDoc.Bookmarks("エクセル表") 

先のVBAでは、Selectしてからその位置から順に出力しています。


Wordの改行と改段落
Wordには改行と改段落がありますが、ぱっと見ただけでは分かりずらいですよね。
問題文に添付した完成後の画像では、
マクロ VBA 100本ノック

VBA100_79.xlsmの後ろは改行で、Sheet1の後ろは改段落にしています。

VBAの定数 文字コード 意味
vbCr 13 改段落
vbLf 10 改段落
vbCrLf 1310 改段落
vbVerticalTab 11 改行


PasteSpecial:図として貼り付け
Selection.PasteSpecial (IconIndex, Link, Placement, DisplayAsIcon, DataType, IconFileName, iconlabel)

名前 説明
IconIndex DisplayAsIconがTrueの場合、この引数は、引数IconFilenameで指定したプログラムファイルで使用するアイコンに対応する数値です。
この引数を省略した場合は、1番目(既定値)のアイコンが使用されます。
Link Trueクリップボード内容のソースファイルへのリンクを作成します。
既定値はFalseです。
Placement Wdoleplacement定数のいずれかをすることができます。
1(wdFloatOverText):Float over text.
0(wdInLine):In line with text.
DisplayAsIcon 真のリンクをアイコンとして表示します。
既定値はfalse。
DataType クリップボードの内容を文書に挿入するときの書式を指定します。
WdPasteDataTypeクラスの定数(下記参照)を使用します。
IconFileName DisplayAsIconがTrueの場合、この引数は、表示するアイコンが格納されるファイルのパスとファイル名です。
IconLabel DisplayAsIconがTrueの場合、この引数は、アイコンの下に表示されるテキストです。
VBAリファレンスより抜粋したものを編集・追記しています。

WdPasteDataTypeクラスの定数
名前 説明
wdPasteBitmap 4 ビットマップ
wdPasteDeviceIndependentBitmap 5 デバイスに依存しないビットマップ
wdPasteEnhancedMetafile 9 拡張メタファイル
wdPasteHTML 10 HTML
wdPasteHyperlink 7 ハイパーリンク
wdPasteMetafilePicture 3 メタファイル
wdPasteOLEObject 0 OLE オブジェクト
Wdpaた Tf 1 リッチ テキスト形式 (RTF)
wdPasteShape 8 図形
wdPasteText 2 文字列

これらは覚えきれるものでもありませんので、都度マクロの記録を使って調べれば良いと思います。
問題文でも、特に形式は指定しませんでした。


サイト内関連ページ

第138回.外部ライブラリ(ActiveXオブジェクト)|VBA入門
・事前バインディングと遅延バインディング(実行時バインディング) ・VBAで良く使われるライブラリ ・ActiveXオブジェクトの最後に
参照設定、CreateObject、オブジェクト式の一覧
VBAでエクセル外のオブジェクトを使うときには、事前バインディングと遅延バインディング(実行時バインディング)の2通りがあります、この時それぞれ何を指定したらよいのか、指定する文字列が長いので結構探してしまうことが度々あります。そこで、自身の覚え書きとしての意味も含めて、参照設定、CreateObjectのclas…
GetObject関数|VBA関数
・GetObject関数の構文 ・GetObjectの解説 ・GetObject関数の使用例 ・GetObject関数とCreateObject関数の使い分け ・CreateObject関数




同じテーマ「VBA100本ノック」の記事

76本目:ボタンの表示名の位置へ移動
77本目:シート挿入イベント
78本目:グラフのデータ範囲拡張
79本目:Wordにセル範囲を図として挿入
80本目:読み取り専用で保存できないブックにする
81本目:全フィルターの絞り込解除
81本目:全フィルターの絞り込解除
82本目:ブックのドキュメントプロパティを取得
83本目:請求書を作成してPDF出力
84本目:ブックの自動バックアップ
85本目:請求日から入金予定日を算出


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ