EXCEL VBA からWordを操作・制御(新規作成・ファイルを開く・データ転記・一覧表の貼り付け・ファイルの保存)
EXCEL VBA からWordを操作・制御(新規作成・ファイルを開く・データ転記・一覧表の貼り付け・ファイルの保存)
今回説明するのは、EXCEL VBAからWordを操作する方法の説明をいたします。普段EXCELとWordを使っていると全く別物のソフトの様に思えますが、EXCEL VBAを使って文書の追記やEXCELで作成した表をWordへ貼り付けなどデータを転記する事ができます。EXCEL・Word・OUTLOOKなどOffice製品では、OLEオートメーションを使って操作する事ができます。他のOffice製品を操作するには、2つの利用方法があります。一つ目は、CreateObject関数を使う方法と参照設定を使う2通りの方法があります。今回は、CreateObject関数を利用する方法を使い、サンプルプログラムを交えて順番に説明いたします。
● CreateObject関数を使用してWordを起動する。
【使用例】
1 2 3 4 5 6 7 8 9 10 |
' ' Sub EXCEL_WORD00() 'EXCEL VBAからWORDを起動する。 Dim WordApp As Object Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット WordApp.Visible = True 'Wordを起動する。 End Sub ' |
EXCEL VBAから既存のWordファイルを起動する。(ファイル名を指定してWordファイルを起動する。)
下記のサンプルプログラムは、EXCEL VBAから指定した既存のWordファイルを起動します。
【プログラム実行条件】
① Wordファイルを用意します。
② 参照先ブックのフルパス(ファイル位置)を実際に保存しているパスをプログラムに記入。
※注意:プログラム内に記述している参照先フルパスを書き換える↓この部分
Set WordDoc = WordApp.Documents.Open(“C:\Users\akira\OneDrive\デスクトップ\Word 文書.docx“)’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' ' Sub EXCEL_WORD01() 'EXCEL VBAから既存のWORDファイルを起動する。 Dim WordApp As Object Dim WordDoc As Word.Document ' Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット WordApp.Visible = True 'Wordを起動する Set WordDoc = WordApp.Documents.Open("C:\Users\akira\OneDrive\デスクトップ\Word 文書.docx")' 指定したWordファイルを起動します。 End Sub ' |
(画面クリックして拡大)
EXCEL VBAから新規Wordファイルを起動して、EXCELシートに記載している文書ををWordへ転記する。
下記のサンプルプログラムは、EXCELのワークシートに記載している文書(セル)の内容を新規Word作成したWord文書へ内容を転記するサンプルプログラムです。EXCELのワークシートのA列には、文書データとして議事録が作成しております。このEXCELのA列に記載している文書データ(議事録内容)をWordへ転記します。
【プログラム実行手順】
① EXCELシートのA列の最終行を取得します。(議事録データの最終行を取得)
② Wordを起動します。
③ Wordの新規作成を実行します。
④ EXCELシートのA列の2行目から最終行までの、議事録データを新規作成したWord文書へ転記します。
【プログラム実行条件】
① EXCELブックのシートのA列に議事録(文書)を入力します。(A列の2行以降~ ※何行でもよい)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
' ' Sub EXCEL_WORD02()’'EXCELシートに記載している文書をWordへ転記します。 Dim WordApp As Object Dim WordDoc As Word.Document Dim I, lRow As Long Dim ExcelText Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得します。 With WordApp .Visible = True 'Wordを起動する(表示) .Documents.Add 'Wordを新規作成 For I = 2 To lRow 'A列の最終行分繰り返す。 ExcelText = Cells(I, "A").Text & vbLf 'EXCELA列のテキストデータを代入 .Selection.TypeText ExcelText '代入したテキストデータをWordへ転記 Next I End With End Sub ' |
(画面クリックして拡大)
EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載している文書データを既存Word文書に追記する。
下記のサンプルプログラムは、EXCEL VBAから既存のWordファイルを起動して、EXCELのワークシートに記載している文書(セル)の内容を既存のWord文書に追記するサンプルプログラムです。追記する内容は、EXCELのワークシートのA列に記載しており、この内容を既存のWordへ文書へ追記を行います。
【プログラム実行手順】
① EXCELからWordを起動します。
② EXCELシートのA列の最終行を取得する。
③ 指定したWordファイル「宴会案内.docx」を起動します。
④ EXCELシートのA列データを2行目からデータ登録されている最終行まで、Wordファイルへ転記します。
【プログラム実行条件】
① EXCELブックのシートのA列に追記文書を入力します。(A列の2行以降~ ※何行でもよい)
② 既存のWordファイルを用意します。(文書を記載しておく)
② 参照先ブックのフルパス(ファイル位置)を実際に保存しているパスをプログラムに記入。
※注意:プログラム内に記述している参照先フルパスを書き換える↓この部分
Set WordDoc = WordApp.Documents.Open(“C:\Users\akira\OneDrive\デスクトップ\宴会案内.docx“)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' ' Sub EXCEL_WORD04() 'EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載している文書データを既存Word文書に追記する。 Dim WordApp As Object Dim WordDoc As Word.Document Dim I, lRow As Long Dim ExcelText Set WordApp = CreateObject("Word.Application") ' CreateObject関数でオブジェクトを作成し変数にセット WordApp.Visible = True 'Wordを起動する lRow = Cells(Rows.Count, "A").End(xlUp).Row 'A列の最終行を取得します。 Set WordDoc = WordApp.Documents.Open("C:\Users\akira\OneDrive\デスクトップ\宴会案内.docx") '指定したWordファイルを起動します。 With WordApp For I = 2 To lRow 'A列の最終行分繰り返す(2行目から最終行まで) ExcelText = Cells(I, "A").Text & vbLf 'EXCELA列のテキストデータを代入 .Selection.TypeText ExcelText '代入したテキストデータをWordへ転記 Next I End With End Sub ' |
(画面クリックして拡大)
EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載している表データを既存Word文書の末尾へ追記する。
下記のサンプルプログラムは、EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載している表データを既存Word文書の末尾へ追記するサンプルプログラムです。既存のWordファイルには、文書が登録されています。このWord文書の末尾に、EXCELシートに記載している表データを追記します。
【プログラムの流れ】
① 既存のWordファイルを起動します。(指定したWordファイルを起動します)
② EXCELファイルの表データをコピーする。
③ 起動したWordファイルの文書の末尾を選択
④ コピーしたEXCELの表をWordファイルの末尾に貼り付けます。
【プログラム実行条件】
① Wordファイル「販売報告.docx」を作成します。
② EXCELに表を作成します。セルA1:E9
③ WordApp.Documents.Open(“C:\Users\akira\OneDrive\デスクトップ\販売報告.docx”) ← Wordファイルの保管先を実際のフルパス指定する。
●EXCEL VBAからWord文書の先頭(最初)・末尾(最後)へ選択(移動)する場合は、下記の通りに指定します。
ActiveDocument.Bookmarks(“\StartOfDoc”).Select ’先頭へ(最初)
ActiveDocument.Bookmarks(“\EndOfDoc”).Select ’末尾へ(最後)
●ブックマーク(Bookmarks)プロパティにつきましては、下記のURLを参照してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
' ' Sub EXCEL_WORD05() 'EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載しているEXCELの表を既存Word文書に追記する。 Dim WordApp As Object Dim WordDoc As Word.Document Dim I As Long Dim ExcelText Set WordApp = CreateObject("Word.Application") ' CreateObject関数でオブジェクトを作成し変数にセット WordApp.Visible = True 'Wordを起動する Set WordDoc = WordApp.Documents.Open("C:\Users\akira\OneDrive\デスクトップ\販売報告.docx") '選択したWordファイルを起動します。 ActiveSheet.Range("A1:E9").Copy 'EXCELの表をコピーする。 ActiveDocument.Bookmarks("\EndOfDoc").Select '起動したWordファイルの文書の末尾を選択 WordApp.Selection.PasteExcelTable False, False, False 'コピーしたEXCELの表をWordファイルの末尾に貼り付けます。 End Sub ' |
(画面クリックして拡大)
EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載している表データを既存Word文書の末尾へ追記し最後にWordファイルを上書き保存する。
下記のサンプルプログラムは、サンプルプログラムの追加プログラムになります。既存のWordファイルに、EXCELの表を追記して最後にWordファイルを上書き保存するサンプルプログラムです。
【書式説明】Closeメゾットを利用してWordファイルを保存・選択・保存しない
●Documetオブジェクト.Close 定数
定数 | 内容(説明) |
---|---|
wdSaveChanges | ファイルを上書き保存する |
wdDoNotSaveChanges | ファイルを保存しない。 |
★【プログラムの流れ】・【プログラムの実行条件】につきましては、上記サンプル④を参照して下さい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
' ' Sub EXCEL_WORD06() 'EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載しているEXCELの表を既存Word文書に追記して上書き保存を行う Dim WordApp As Object Dim WordDoc As Word.Document Dim I As Long Dim ExcelText Set WordApp = CreateObject("Word.Application") ' CreateObject関数でオブジェクトを作成し変数にセット WordApp.Visible = True 'Wordを起動する Set WordDoc = WordApp.Documents.Open("C:\Users\akira\OneDrive\デスクトップ\販売報告.docx") '選択したWordファイルを起動します。 ActiveSheet.Range("A1:E9").Copy 'EXCELの表をコピーする。 ActiveDocument.Bookmarks("\EndOfDoc").Select '起動したWordファイルの文書の末尾を選択 WordApp.Selection.PasteExcelTable False, False, False 'コピーしたEXCELの表をWordファイルの末尾に貼り付けます。 WordDoc.Close wdSaveChanges 'Wordファイルを上書き保存する WordApp.Quit 'Wordアプリケーションを閉じる End Sub ' |
また、VBAに関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。