エクセルマクロ エクセルからワードを操作して文章を印刷する

今回はエクセルマクロでワードの文章を操作して、同じ文面で
何人もの相手に送れるようなプログラムを書きたいと思います。

私はワードのことも詳しくありませんので、どういう方法でエクセルから
ワードを操作したらいいのかネットで調べてみました。

まず結論から言うと、エクセルからワードを操作するという場面は
ほぼ無いようなものということで、無意味とは言わないまでも作る必要は
ないようです。

ですので、ネットで調べてもいい解答はありませんでした。

だからと言ってそれでやめては面白くありませんので、更に調べて
見てこれならできそうだなというHPがありました。

そのやり方を使ってエクセルからワードを操作して文章の例えば
氏名とか住所とかを変更して印刷出来るマクロを組んでみました。
住所録等

それでそのやり方というのは、ワードで定型文を書いた後保存するとき、
通常のワードファイルではなく、Webページとして保存するという
ことです。図がそうです。
ワードwebページ

それだけです。
そして、このファイル形式で保存するとエクセルでファイルを開くことが
出来て、文章の内容を変更して印刷することが出来るわけです。

詳しく書きますと、
まず、ワードで文章を書きます。(すでに住所録とかの名簿はあるものとしています)
その際、変更が必要な箇所を、変更が必要な箇所とわかるようにします。
〇〇△△様という氏名を書く欄があった場合、氏名を変更する必要がありますので、
〇〇を【姓】として、△△を【名】として、【姓】【名】様というように書きます。
住所を変更するのであれば住所欄は【住所】と書きます。
そして書き終えて保存するときは、WEBページとして保存します。
次に住所録等のエクセルファイルを開いてマクロを組んでいきます。

マクロの記録でこの場合3行目(何行目でもいいです)の姓名住所等のセルに適当な文字を入れて
記録をします。記録が終わったら元に戻す(ショートカットキー:Ctrl+z)でデータを元に戻しておきます。

もうひとつマクロの記録をします。
マクロの記録を開始したら、ファイルから開くをクリックしてワードのWEBページで
保存したファイルを選択して開きます。
開いたら記録を終了します。

更にマクロの記録を続けます。
こんどはちょっと注意が必要です。
現在はエクセルのファイルが2枚開いている状態になっています。
マクロの記録をするのは住所録等のファイルになりますので、ファイル名を確認して
マクロの記録を始めます。
記録を開始したら、先程開いたワードのWEBページファイルを選択します。
そしてそのファイルで次のように操作をします。

文章の書かれているセルを選択します。
この状態でショートカットキーで「Ctrl+H」を押します。
すると検索と置換ウィンドウが現れます。
そこで置換をクリックして、検索する文字列に【姓】を入力、置換後の文字列に
適当な名字(例えば鈴木)を入力、そしてすべて置換をクリックします。
置換終了の表示が出たらOKをクリックし、置換ウィンドウも閉じます。
次にそのワードのWEBページファイルの一番下のステータスバーの右側に
改ページビューという項目がありますのでクリックして改ページを表示させます。

このファイルの場合1ページに収まらずに2ページになっていると思いますので、
これを調整します。やり方は簡単で、改ページとして区切られた青い実線と青い
点線を重ねれば、それで1ページとなり、印刷のとき1ページになります。
そのあとファイルをクリックし、印刷をクリックします。
プレビュー画面で1ページに正しく表示されていたら印刷をクリックします。
印刷が終わったらもとの画面に戻ってマクロの記録を終了します。

余談ですが、エクセル2003だと印刷のときプレビュー画面でマクロの記録が
出来るのですが、エクセル2016だと印刷までやらないとマクロの記録が
出来ないようです。

そして最後のマクロの記録として、開いていたワードのWEBページを閉じる
記録をします。これも住所録等のファイルでマクロの記録を開始してワードの
WEBページを保存せずに閉じます。そして記録を終了します。

以上4つの処理をマクロの記録で記録しました。
これらは別々のマクロとして記録されていますが、最初のマクロに
集約しますので、他はコピーして最初のマクロに貼り付けます。

これで準備が終わりましたので、VBEを開いてこれまでに記録した内容を
修正していきます。


最初に記録したマクロで、人数分のループを回しますので、ここは
いつもの、ある列の最終行を取得するコードから始めます。
そして姓・名・住所・電話番号・メールアドレスを変数に代入していきます。

代入が終わったら、次に記録したマクロ(ファイルを開くもの)をコピーして
先程のマクロの記録の尻に貼り付けをします。


それが終わったら、次は三番目に記録したマクロの修正をします。
中身を見ていただくと分かる通り、これは【姓】だけを鈴木に置換した
コードになります。
変更したい箇所は他に4箇所ありますので、おわかりのとおり、このコードを
コピーして、一番最初のマクロの、先程ファイルを貼り付けたその後に
5個貼り付けます。

そのあとこのコードの一部を修正します。
それはどこかと言うと、
selection.Replace what:="【姓】",Replacement:="鈴木",・・・の部分です。
最初はこの"鈴木"を変数に置換えます。私の場合は【姓】は変数aとしたので、
・・,Replacement:=a,・・・ とします。"  " は必要ありません。

次の修正からは2箇所の変更になります。
"【姓】" の【姓】を【名】変更し、"【名】" とします。
そして"鈴木" を :=b(私の場合以下同じ)とします。

次は【姓】を【住所】に :="鈴木"を :=c に変更します。

次は【姓】を【電話番号】に、:="鈴木" を :=d に変更します。

最後に【姓】を【メールアドレス】に、:="鈴木" を ;=e に変更します。

以上で修正を終わらせてもいいのですが、5個のコードを比べると
同じコードが5回出てきているのがわかると思います。

windows("サンプルtemplate.htm").activate (サンプルtemplateというのは
私の場合で、みな違います)

このコードは5個のコードの集まりの中の最初に書いてあれば事足ります。
ですので、1個目だけ残して、他の4個のこのコードは削除します。

それから印刷を実行します。

そして最後に記録したファイルを保存せず閉じるマクロを修正します。
windows("サンプルtemplate.htm").activate
activewindow.close

マクロの記録で記録されたものには close がありませんので、
activewindow のあとに close を追加します。

これで最後にnext i を書いて終了です。
以上のことを踏まえてのマクロ作成例です。
エクセルからワードを操作して文章を連続印刷 → 解答例ダウンロード

とりあえず私の場合は動作しましたが、完全ではないことを承知おきください。
今日もお読みいただきありがとうございました。
いつか動画を撮ってみたいと思います。