【ExcelVBA】Excelのシートの表をそのままWordに出力して保存するには

この記事では、Excelのシートの表をそのままWordに出力して保存する方法についてご説明します。

【動画】Excelのシートの表をそのままWordに出力して保存する実際の動き

本題に入る前に、まずは次の動画をご覧ください。


ExcelのマクロがWordのファイルを開き、Excelのシートの表をそのままWordに出力しています。

マクロ作成の流れ

STEP.1
Wordファイルを開き、Wordの機能にアクセスできるインスタンスを生成する
Wordファイルを開き、Wordの機能にアクセスできるインスタンスを生成します。
STEP.2
Excelのシートの表をコピーする
Excelのシートの表をコピーします。
STEP.3
コピーしたExcelのシートの表をWordに貼り付ける
コピーしたExcelのシートの表をWordに貼り付けます。

Excelファイルの例

「top」というシートのほかに、点数表がある「1月」「2月」「3月」のシートがあります。

A2の黄色のセルに「1月」「2月」「3月」のいずれかを入力して出力ボタンをクリックすると、Wordファイルにシートの点数表が出力されて保存されます。

今回は以下のWordファイルを用意しました。

Wordファイルには何も情報が存在しない空のファイルです。(ファイル名は「0289.docx」)

例えばA2の黄色のセルに「1月」と入力して「出力」ボタンをクリックするとWordファイルには、「1月」のシートの表がそのままWordに出力されて保存されています。

コードの例

Option Explicit

Private Sub btn_exec_Click()

    Dim ws          As Worksheet    'ワークシート変数
    Dim WordApp     As Object       'Wordアプリケーションインスタンス用変数
    Dim WordDoc     As Object       'Wordファイル用変数
    Dim rng         As Range        'Rangeオブジェクト格納用変数
    
    'Wordにデータを出力するシートを取得する
    Set ws = Worksheets(Worksheets("top").Range("shtNM").Value)
    
    '表のデータの範囲を取得する
    Set rng = ws.Range("A1:G21")
    
    'Wordアプリケーション用インスタンスを生成する
    Set WordApp = CreateObject("Word.Application")

    'Wordを表示しない
    WordApp.Visible = False

    'Wordファイルを開く
    Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\0289.docx")

    'Excelのシートの表データをコピーする
    rng.Copy

    'Wordファイルに貼り付ける
    WordDoc.Range.PasteExcelTable _
                                     LinkedToExcel:=False, _
                                     WordFormatting:=False, _
                                     RTF:=False

    'クリップボードをクリアする
    Application.CutCopyMode = False

    'Wordのファイルを保存する
    WordDoc.Save
    
    'Wordのファイルを閉じる
    WordDoc.Close
    
    'Wordを終了する
    WordApp.Quit
    
    '後処理
    Set WordApp = Nothing
    Set WordDoc = Nothing
    
End Sub

注目すべきコード①

最初に見て頂きたいのは11行目です。

    'Wordにデータを出力するシートを取得する
    Set ws = Worksheets(Worksheets("top").Range("shtNM").Value)

コードの説明

以上のコードは、Wordファイルに出力するデータがあるシート名を取得するコードです。

Wordに出力したい表のデータがあるシート名を入力します。

注目すべきコード②

次に見て頂きたいのは14行目です。

    '表のデータの範囲を取得する
    Set rng = ws.Range("A1:G21")

コードの説明

以上のコードは、表のデータの範囲を取得するコードです。

Wordファイルに出力したいExcelの表データの範囲を取得します。

以上のコードでは、A1からG21のセルの範囲の値をWordに出力します。

自分のExcelファイルに合わせて出力したい範囲を指定してください。

注目すべきコード③

次に見て頂きたいのは17行目です。

    'Wordアプリケーション用インスタンスを生成する
    Set WordApp = CreateObject("Word.Application")

コードの説明

以上のコードは、Wordアプリケーション用インスタンスを生成するコードです。

このインスタンスを生成することでWordが起動されて操作することができるようになります。

今回はWordファイルを開いたりWord自体を終了させるなどの操作を行うのに使います。

注目すべきコード④

次に見て頂きたいのは20行目です。

    'Wordを表示しない
    WordApp.Visible = False

コードの説明

以上のコードは、Wordの画面を非表示にするコードです。

Trueの場合はWordが表示されたままの状態になります。

注目すべきコード⑤

次に見て頂きたいのは23行目です。

    'Wordファイルを開く
    Set WordDoc = WordApp.Documents.Open(ThisWorkbook.Path & "\0289.docx")

コードの説明

以上のコードは、Wordファイルを開く処理のコードです。

OpenメソッドにExcelのシートの表を出力したいWordファイルのフルパスを指定して実行することで、そのWordファイルが開きます。

注目すべきコード⑥

次に見て頂きたいのは26行目から32行目です。

    'Excelのシートの表データをコピーする
    rng.Copy

    'Wordファイルに貼り付ける
    WordDoc.Range.PasteExcelTable _
                                     LinkedToExcel:=False, _
                                     WordFormatting:=False, _
                                     RTF:=False

コードの説明

以上のコードは、Excelのシートの表をコピーし、Wordファイルに貼り付ける処理のコードです。

Excelのシートの表のコピーはCopyメソッドを、Wordファイルに貼り付けるのはPasteExcelTableメソッドを実行します。

コードの詳細

26行目のコードは、Excelのシートの表のコピーをCopyメソッドを実行して行います。

rngにはセルの範囲が設定されているので、そのセルの範囲をCopyメソッドでコピーします。

29行目から32行目のコードでは、コピーしたExcelのセルの表をWordファイルに貼り付けます。

PasteExcelTableメソッドを実行することでコピーしたExcelのセルの表をWordファイルに貼り付けられます。

30行目の引数LinkedToExcelは、貼り付けられた元のExcelの表とリンクさせるかを設定します。

Trueならリンクをさせ、Falseならリンクさせません。

今回はリンクさせないようFalseを設定しています。

31行目の引数WordFormattingは、貼り付けたデータを、Word側のフォーマットに合わせるかについて設定します。

TrueならWord側のフォーマットに合わせ、FalseならWord側のフォーマットに合わせません。

今回はWord側のフォーマットに合わせていません。

Word側のフォーマットに合わせない場合は、Excelの表のフォーマットがそのままWordに出力されます。

32行目の引数RTFは、RTF(リッチテキスト形式)でExcelの表をWordに出力するかについて設定します。

TrueならRTFで、Falseならで出力しません。

Falseの場合はRTFではなく通常の形式で貼り付けられます。

注目すべきコード⑦

次に見て頂きたいのは38行目から44行目です。

    'Wordのファイルを保存する
    WordDoc.Save
    
    'Wordのファイルを閉じる
    WordDoc.Close
    
    'Wordを終了する
    WordApp.Quit

コードの説明

以上のコードは、Wordのファイルを保存して閉じ、Word自体も閉じる(終了する)処理のコードです。

コードの詳細

38行目のコードは、Wordのファイルを保存するコードです。

41行目のコードは、Wordのファイルを閉じるコードです。

44行目のコードは、Wordを終了する(閉じる)コードです。

動作確認

今回は以下のExcelファイルを用意しました。

「top」というシートのほかに、点数表がある「1月」「2月」「3月」のシートがあります。

A2の黄色のセルに「1月」「2月」「3月」のいずれかを入力して出力ボタンをクリックすると、Wordファイルにシートの点数表が出力されて保存されます。

また、今回は以下のWordファイルを用意しました。

Wordファイルには何も情報が存在しない空のファイルです。(ファイル名は「0289.docx」)

【ケース①】シート「1月」の表をWordファイルに出力

マクロ実行前

A2の黄色に「1月」を入力して実行ボタンをクリックします。

なお、「1月」のシートの表は下のとおりです。

マクロ実行後

マクロ実行後にWordファイルを開くと、「1月」のシートの表がWordのファイルに出力されていることが確認できました。

【ケース②】シート「2月」の表をWordファイルに出力

マクロ実行前

A2の黄色に「2月」を入力して実行ボタンをクリックします。

なお、「2月」のシートの表は下のとおりです。

マクロ実行後

マクロ実行後にWordファイルを開くと、「2月」のシートの表がWordのファイルに出力されていることが確認できました。

【ケース③】シート「3月」の表をWordファイルに出力

マクロ実行前

A2の黄色に「3月」を入力して実行ボタンをクリックします。

なお、「3月」のシートの表は下のとおりです。

マクロ実行後

マクロ実行後にWordファイルを開くと、「3月」のシートの表がWordのファイルに出力されていることが確認できました。

最後に

この記事では、Excelのシートの表をそのままWordに出力して保存する方法についてご説明しました。

Excelのシートの表をそのままWordに出力して保存したい場合は本記事を参考にして頂けたら幸いです。

プログラミングのスキルを習得するなら

プログラミングのスキルを習得したい、今のスキルをもっと高めたい、そう考えているなら「プログラミングスクール」がおすすめです。

プログラミングのスキルの基礎を身につけるなら「TechAcademy」で1週間の無料体験があるので、これで「プログラミングの基礎」を学ぶのにおすすめですよ。

→ TechAcademyの「1週間 無料体験」はこちら