パソコンスキルの教科書

パソコンスキルの教科書

東京大学大学院卒。博士課程に進学を志すも、担当教授と折が合わず、無職になる。医者を目指すも結局断念。田舎で派遣社員として働く。「スキルがなければ、仕事ももらえない」と悟り、ビジネススキルを学ぶ。プログラミング、英語を学び、一部上場企業へ転職。年間100時間以上の業務効率化を行い、社内講師に抜擢。海外の案件を担当し、数億円のプロジェクトに携わる。個人の事業でも、月売上100万を達成。現在は、自分の価値を高めるためのスキル向上支援を行う

エクセルマクロVBAでワード連携!基本操作から差し込み印刷まで(コード付)

f:id:gene320:20170824223042p:plain

・VBAでプログラミングを覚えたからには、ワード操作してみたい!
・エクセル情報をワードに差し込んで印刷をしたい!
・Wordのオフィスソフトとエクセルを連携させてみたい!

そんなことを考えているなら、この記事を読んでみてください。この記事では、

・エクセルマクロでワードを操作する方法
・ExcelVBAをワード連携マクロを書く
・Officeアプリケーションのオブジェクトモデルを作る

こんなとっておきの情報を紹介します。コードもあわせて紹介しますので、ぜひこのまま読みすすめていってください。

エクセルVBAでword操作!基本操作から差し込み印刷まで

エクセルVBAでのワード操作とは?メリットや違い

エクセルVBAでワードを操作してみたいと考えているけれど、そもそも「ワード操作ってなに?」、「どんなことをするのか理解できていない。」というあなたへ、エクセルマクロでのワード操作についてカンタンに分かりやすく紹介します。

「エクセルマクロでのword操作」をカンタンに紹介

そもそも「エクセルマクロでのword操作」とは、エクセルマクロVBAを利用して、ワードを起動し、ワードの文章を記載したり、ワードの表を作ったりすることを指します。

エクセルからワードを操作するので、エクセルの表やエクセルの顧客情報や商品情報をワードに流し込みたい場合は、役立つ場合があります。

具体的なメリットやデメリットについては、後で記載していますので、このまま読み進めていってください。

ワード操作するメリット

エクセルマクロでワード操作するメリットは、多くの場合、差し込み印刷でしょう。

たとえば、「エクセルの情報をもとに、大量のワードファイルを顧客ごとに文言を変更して印刷」という仕事には重宝します。

もし、この仕事をマクロを使用せずに行うなら、手作業で一つずつ、コピペしてワードに貼り付ける必要があり、かなりしんどい作業です。しかし、エクセルマクロを利用すれば、ボタン一つで印刷するところまで自動で行えます。

ワード操作するデメリット

デメリットとしてもっとも大きいのは、ワードが必要な場面はほとんどないことです。

考えてみてほしいのですが、ワード作成できる資料は、エクセルでも代用可能ですよね。つまり、わざわざワードを操作するメリットはほとんどないのが実情です。

エクセルマクロを利用して、エクセルの中で作業を完結したほうがよっぽどラク。ワードに強いこだわりがない限り、エクセルマクロでワードを操作することはムダです。

むしろ、ワードと同じ資料をエクセルで作成しておいて、エクセルからエクセルのフォーマットに情報を流し込む方が賢いやりかたです。こうすれば、わざわざワード操作という上級テクニックを使用する必要がないので、ラクにプログラムを組めます。

「エクセルVBAでワード操作」と「ワードVBA」の違い

「エクセルVBAでワード操作」と「ワードVBA」の違いとは何?という質問をいただくことがあります。大きく違うところは、エクセルVBAで操作する点です。

つまり、エクセルVBAで操作するので、エクセルの情報をワードに流し込めます。具体的にいうと、以下の用途で強みを発揮します。

・エクセルであらかじめ準備した表をwordに自動で貼り付けることができる。
・テンプレートとなるワード文書の[氏名]などをエクセルに記載されている情報を差し込める

一方、ワードVBAでは、ワードの機能をマクロにできます。ですので、複数の操作を1つに集約できます。

たとえば、以下の3つの操作をするとします。

①「Times New Roman」
②「フォントサイズ12」
③「フォントの色を黒」

ワードを普通に使用すると、3つの操作を1つずつ行う必要がります。しかし、マクロを使えば、この3つの操作を1つの操作に集約することができます。

実際には、ワードVBAからエクセル操作することは可能ですが、使うメリットが全くありませんので、ここでは割愛します。

エクセルVBAでwordを操作する前に考えるべきこと

既に記載しましたが、大切なことなので、繰り返しお伝えします。

本当にワードは必要か?ということを考えましょう。

わざわざワードを操作するメリットはほとんどありません。せいぜいスキルアップできる程度です。どうしてもワードを使わないといけない場面にのみ活用してください。

エクセルマクロを利用して、エクセルの中で作業を完結したほうが「ラク」ということは頭に入れておくことをオススメします。

エクセルVBAでword連携する前にやっておくこと

エクセルVBAでword操作するためのプログラミングに入る前に、準備しておくことがあります。

準備|VBEで外部ライブラリへの参照設定でWord型を追加

参照設定とは、機能拡張させること、です。

Microsoft Word 15.0 Object Libraryにチェックを入れることで、Word操作の設定ができるようになります。バージョンによっては、15.0ではないときがあります。もし15.0ではなく、数字が小さい場合は、それにチェックを入れましょう。

設定方法

1.VBEを開いて頂いて、「ツール」→「参照設定」
2.Microsoft Word 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック

詳細はこちらの画像の通りです。

1.VBEを開いて頂いて、「ツール」→「参照設定」

f:id:gene320:20170613213650p:plain

2.Microsoft Word 15.0 Object Libraryのライブラリにチェックを入れて、OKをクリック

f:id:gene320:20170824223129p:plain

ワードオブジェクトについて理解しておく

エクセルマクロから、ワード操作するときのハードルは、オブジェクト知識が必要なことです。もし、オブジェクトの知識が乏しい場合、コード編集に難しさを感じるでしょう。

VBAでエクセルを操作をするときと違って、ワード独自のオブジェクトが多数出てきます。これが、混乱する原因になりますので、調べながら、学習していくことをオススメします。

学習方法については、この記事の後半で記載していますので、合わせてよんでみてください。

エクセルとワードを連携!文章作成のサンプルコードを解説

エクセルVBAを利用して、ワード連携するマクロについて、サンプルコードを使いながら、詳しく説明していきます。ぜひコピーして活用してくださいね。

具体的には、以下のことをやっていきます。

コード1|変数を宣言
コード2|wordを起動して、ファイルを開く
コード3|ワードファイルを読み込み、文章を編集する
コード4|ワードに文章を入力・出力する
コード5|文字を検索、置換する
コード6|エクセルからワードに表を貼り付け
コード7|wordファイルを印刷する
コード8|wordファイルを名前をつけて保存or上書き保存する
コード9|wordファイルを閉じる

このコードを使えば

マクロ処理前のワードファイルとエクセル

f:id:gene320:20170824223148p:plain

マクロ処理後のワードファイル

f:id:gene320:20170824225507p:plain

①Newfileとして新しくフォルダに保管
②表や文字が出力

このサンプルコードを使うときの注意点

注意してほしいのは、

・sample.docというファイルをあらかじめ作成すること
・マクロが入ったエクセルと同じフォルダにsample.docを保存しておくこと

つまり、以下の画像のような状態にしておかないと、以下のマクロは作動しませんので注意してください。

f:id:gene320:20170824223249p:plain

文章作成のサンプルコード|コピペして使おう

以下のコードです。

Option Explicit

Sub sample1()

'''---コード1|変数を宣言
    Dim path As String
    Dim wdapp As Word.Application
    Dim wddoc As Word.Document
    Dim wdrg As Word.Range
    Dim c As Long
    Dim waitTime As Variant

'''---コード2|wordを起動して、ファイルを開く
    Set wdapp = CreateObject("Word.application")
    wdapp.Visible = True
    path = ThisWorkbook.path & "\sample.doc"

'''---コード3|ワードファイルを読み込み、文章を編集する状態にする
    Set wddoc = wdapp.Documents.Open(path) '編集モードで開く
    'Set wddoc = wdapp.Documents.Open(path, , True)' 閲覧モードで開く
    waitTime = Now + TimeValue("0:00:03")
    Application.Wait waitTime

'''---コード4|ワードに文章を入力・出力する
   wddoc.Paragraphs(1).Range.Text = "入力したい文字"

'''---コード5|文字を検索、置換する
    With wddoc.Content.Find
        .Text = "入力したい文字"
        .Forward = True
        .Replacement.Text = "置換文字列"
        .Wrap = wdFindContinue
        .MatchFuzzy = True
        .Execute Replace:=wdReplaceAll
    End With

'''---コード6|エクセルからワードに表を貼り付け
    Range("A1:C4").Copy
    c = wddoc.Paragraphs(1).Range.End
    Set wdrg = wddoc.Range(Start:=c, End:=c)
    wdrg.Select
    wdrg.PasteExcelTable Linkedtoexcel:=False, wordformatting:=True, RTF:=True

'''---コード7|wordファイルを印刷する
    wddoc.PrintOut

'''---コード8|wordファイルを名前をつけて保存or上書き保存する</h3>
    wddoc.SaveAs Filename:=ThisWorkbook.path & "\Newfile.doc"
    'wddoc.Save '上書き保存する場合

''' ---コード9|wordファイルを閉じる</h3>
    wddoc.Close savechanges:=False
    wdapp.Quit
    Set wddoc = Nothing
    Set wdapp = Nothing

End Sub

それでは、詳しく解説していきます。

コード1|変数を宣言

    Dim path As String
    Dim wdapp As Word.Application
    Dim wddoc As Word.Document
    Dim wdrg As Word.Range
    Dim c As Long
    Dim waitTime As Variant

1行目:変数設定:テンプレートになるwordファイルのパス(URL)
2行目:Wordで使用するオブジェクト生成
3行目:Wordで使用するオブジェクト生成
4行目:変数設定:wordの文パーツを指定
5行目:変数設定:cをLong型で生成
6行目:変数設定:waitTimeをVariantを生成

コード2|wordを起動して、ファイルを開く

    Set wdapp = CreateObject("Word.application")
    wdapp.Visible = True
    path = ThisWorkbook.path & "\sample.doc"

1行目:wdappに新しいWord.Applicationをセット
2行目:wdappを表示
3行目:pathにワードファイルのURLを設定

なお、ワードファイルのファイル名をsample.docとしています。

コード3|ワードファイルを読み込み、文章を編集する

    Set wddoc = wdapp.Documents.Open(path) 
    'Set wddoc = wdapp.Documents.Open(path, , True)' 閲覧モードで開く
    waitTime = Now + TimeValue("0:00:03")
    Application.Wait waitTime

1行目:wddocにsample.docをセットして、編集モードで開く
2行目:wddocにsample.docをセットして、閲覧モードで開く
3行目:waitTimeに3秒後をセット
4行目:waitTime(3秒後)待つ

4行目は、ワードアプリを開くまでに十分待つことで、エラーが発生する要因を減らす工夫を入れています。

コード4|ワードに文章を入力・出力する

   wddoc.Paragraphs(1).Range.Text = "入力したい文字"

1行目:wddoc(sample.doc)の1行目に、「入力したい文字」と入力する

コード5|文字を検索、置換する

    With wddoc.Content.Find
        .Text = "入力したい文字"
        .Forward = True
        .Replacement.Text = "置換文字列"
        .Wrap = wdFindContinue
        .MatchFuzzy = True
        .Execute Replace:=wdReplaceAll
    End With

1行目:withを使って、記載を減らす(可読性アップ)
2行目~7行目:sample.docの中の"入力したい文字"を検索して"置換文字列"に置換する
8行目:with終わり

コード6|エクセルからワードに表を貼り付け

    Range("A1:C4").Copy
    c = wddoc.Paragraphs(1).Range.End
    Set wdrg = wddoc.Range(Start:=c, End:=c)
    wdrg.Select
    wdrg.PasteExcelTable Linkedtoexcel:=False, wordformatting:=True, RTF:=True

1行目:エクセルのセルA1~C4をコピー
2行目:wddoc(sample.doc)の1行目を指定
3行目~5行目:1行目でコピーした部分をwddocの1行目にペースト

コード7|wordファイルを印刷する

    wddoc.PrintOut

1行目:wddoc(sample.doc)を印刷

コード8|wordファイルを名前をつけて保存or上書き保存する

    wddoc.SaveAs Filename:=ThisWorkbook.path & "\Newfile.doc"
    'wddoc.Save '上書き保存する場合

1行目:wddoc(sample.doc)をNewfile.docという名前で保存(ファイルはsample.docと同じフォルダに保存される)
2行目:wddoc(sample.doc)を上書き保存

コード9|wordファイルを閉じる

    wddoc.Close savechanges:=False
    wdapp.Quit
    Set wddoc = Nothing
    Set wdapp = Nothing

1行目:wddoc(sample.docn)を閉じる(変更を保存しない)
2行目:wdappを閉じる
3行目:wddocの設定を解除
4行目:wdappの設定を解除

差し込み印刷したいなら|サンプルコードを紹介

「エクセルVBAでワードを操作したい!」と強く感じるのは、多くの場合、差し込み印刷をする場合でしょう。

そこで、ここでは、差し込み印刷をする方法をサンプルコードを紹介します。

このサンプルコードを使えば、

マクロ処理前のワードファイルとエクセル

f:id:gene320:20170824224818p:plain

マクロ処理後のワードファイル

f:id:gene320:20170824223324p:plain

何が起きているのか?

エクセルのそれぞれの行の
A列 No
B列 [姓]
C列 [名]
D列 [住所]
E列 [電話番号]
F列 [メールアドレス]

の情報をワード
[姓]
[名]
[住所]
[電話番号]
[メールアドレス]
と置換して、印刷し、保存する。

・エクセルの各行に対応したワードファイルが生成される
・ファイル名は、"No_[姓][名]"でそれぞれ保管される

ただし、このサンプルコードを活用するには、「エクセル表」と「ワードのテンプレート」を上手く連携させる必要がありますので、後述の注意点をよく読んでからご利用ください。

差し込み印刷のサンプルコード

差し込み印刷のサンプルコードはこちらです。

Sub sashikomi_macro()
    Dim cmax, cnt, i, k As Long
    Dim path, str As String
    Dim wdapp As Word.Application
    Dim wddoc As Word.Document
    Dim wdrg As Word.Range
    Dim c As Long
    Dim waitTime As Variant

    cmax = Range("A65536").End(xlUp).Row
    cnt = Range("IV1").End(xlToLeft).Column

    Set wdapp = CreateObject("Word.application")
    wdapp.Visible = True

    For i = 2 To cmax
        path = ThisWorkbook.path & "\sample.doc"
        Set wddoc = wdapp.Documents.Open(path)
        waitTime = Now + TimeValue("0:00:03")
        Application.Wait waitTime

        For k = 0 To cnt - 2
            With wddoc.Content.Find
                .Text = Range("B1").Offset(0, k).Value
                .Forward = True
                .Replacement.Text = Range("B" & i).Offset(0, k).Value
                .Wrap = wdFindContinue
                .MatchFuzzy = True
                .Execute Replace:=wdReplaceAll
            End With
        Next

        wddoc.PrintOut

        str = Range("A" & i).Value & "_" & Range("B" & i).Value & Range("C" & i).Value
        wddoc.SaveAs Filename:=ThisWorkbook.path & "\" & str & ".doc"
        wddoc.Close savechanges:=False
        Set wddoc = Nothing
    Next

    wdapp.Quit
    Set wdapp = Nothing

End Sub

準備すること|エクセルとワードのテンプレートファイル

ここで使用するサンプルコードを上手に活用するには、

・エクセル表
・ワードのテンプレートファイル

を作成しておく必要があります。

エクセル表とワードは以下のようなものを準備します。

f:id:gene320:20170824224716p:plain

f:id:gene320:20170824224726p:plain

サンプルコードを利用するなら!3つの注意点

もし、この記事で紹介しているコードをそのまま使用するなら、以下の3つに注意してください。

・エクセルファイル(マクロ入り)とワードファイルは同じフォルダに保管
・エクセルの1行目{[姓]、[名]・・・}とワードの置換文字{[姓]、[名]・・・}を一致させる
・印刷条件は、現行設定が反映される(事前に変えておくこと)

この3つをクリアしないと、ここで紹介するマクロは作動しません。場合によっては、エラーが出てしまいます。

中級者レベルの方であれば、コードを見れば、エラー対処もできますし、編集して上手に活用できるでしょう。しかし、初心者レベルの方であれば、エラーが出て、せっかくのマクロを活かしきれません。気を付けてくださいね。

もし、あなたが、エラー対処できるようになりたいなら、こちらの無料動画で学んでみてください。丁寧に解説されているので、初心者の方でも、ある程度は自力でマクロが書けるようになります。

テンプレートファイルをダウンロードしたい方はコチラから

この記事の中で紹介しているマクロのコードが入ったファイルを無料でダウンロードできるようにします。設定が面倒だなと感じる方は、以下のフォームにメールアドレスを入力いただくと、返信メールからエクセルファイルをダウンロードできます。

ぜひご活用ください。

使えるテクニック

上記で紹介した内容の他にも、使えるテクニックを紹介します。

ワードのページ数を調べる

Msgbox wddoc.BuiltinDocumentProperties(14)

ワードの文字数を調べる

Msgbox wddoc.BuiltinDocumentProperties(16)

エクセルとワード連携させるマクロを勉強するなら|本や動画講座

エクセルとワード連携させるマクロについて、もっと勉強したい方のために、オススメの教材を紹介します。

1.おすすめの本・書籍

もし、本や書籍で学びたいなら、以下の2冊がオススメです。

1.1エクセルマクロからワード操作するマクロを学ぶなら

オフィスの達人〈5〉VBA活用術―Excel/Word/Access/PowerPoint/Outlook Office 2003対応 (オフィスの達人 (5))

オフィスの達人〈5〉VBA活用術―Excel/Word/Access/PowerPoint/Outlook Office 2003対応 (オフィスの達人 (5))

この本を使えば、word操作を学習することができます。しかし、この本だと「分からない部分を質問できない」、「情報がアップデートされていない」ことがあります。また、office 2003で、情報が古い場合もあります。ですので、がっつり学びたい方には、物足りないでしょう。

1.2 ワードVBAを学ぶなら(エクセルマクロVBAからのワード操作ではありません)

作って簡単・超便利! Wordのマクロ実践サンプル集 [Word2010/2007/2003/2002対応] (Wordで作ったWordの本)

作って簡単・超便利! Wordのマクロ実践サンプル集 [Word2010/2007/2003/2002対応] (Wordで作ったWordの本)

ワードvbaで仕事をラクにしたいと思うなら、この本がオススメです。ワードを操作をしながら、実践してみてください。ただし、エクセルマクロVBAからのワード操作ではありません。単純にワードvbaの情報です。

2.おすすめの動画講座

ワードとの連携を学ぶなら、エクセルからワードなどの外部アプリとの連携について、マスターすることをオススメします。ワード連携を本当の意味で理解できるようになります。

習得できれば、パワポ、アウトルック、ファイル・フォルダ操作まで応用できるようになります。

outlook、パワポ、ワード、ファイル操作、フォルダ操作は一見異なるように見えますが、原理原則は同じです。ですので、もし学ぶなら、原理原則の部分を学び、すべてに応用できるようになることをオススメします。

もしきちんと学ぶなら、このオンライン動画教材がオススメです。講師に質問できますので、分からないところがあっても安心ですし、今すぐ始めることができます。

エクセルとワード連携させるマクロを自力で書けるようになりたいなら

エクセルとワードを連携させるマクロを紹介しましたが、「あなたのやりたいこと」と「紹介しているコード」は100%一致することはないでしょう。せっかく良い情報を知っても、活用できなければ悲しいですよね。

あなたもご存じの通り、ウェブにもたくさんのマクロの情報が存在します。もし、これらを最大限に活用するには、あなたがマクロを自力で編集できるようになることです。

自力で編集できるレベルになれば、ウェブの情報を見て、自分に必要な部分だけを拾えるようになります。そうすれば、分からない所が合っても少し調べれば、解決します。

もし、自力で編集できるようになりたいなら、まずはこちらの無料動画講座で学ぶことをオススメします。無料の上、今スグに学習をスタートできます。ウェブの資産を活かすためにも、ぜひ自力で編集できるようレベルを目指しましょう。