Categories: VBA基礎

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関数を利用する方法を使い、サンプルプログラムを交えて順番に説明いたします。

 

 

 

●書式の説明 (EXCEL VBAからWordの起動)

● CreateObject関数を使用してWordを起動する。

 

【使用例】

'
'
Sub EXCEL_WORD00()  'EXCEL VBAからWORDを起動する。

    Dim WordApp As Object
    Set WordApp = CreateObject("Word.Application") ' CreateObject関数でWordをセット
    WordApp.Visible = True 'Wordを起動する。
      
End Sub
'

 

【実行前~実行後】
※Wordが起動されました。実行から起動までに利用PCにもよりますが、約3秒程度かかります。

 

 

 

EXCEL VBAから既存のWordファイルを起動する。(ファイル名を指定してWordファイルを起動する。)

 

 

●プログラム説明 (サンプル①)

下記のサンプルプログラムは、EXCEL VBAから指定した既存のWordファイルを起動します。

【プログラム実行条件】
① Wordファイルを用意します。
② 参照先ブックのフルパス(ファイル位置)を実際に保存しているパスをプログラムに記入。
※注意:プログラム内に記述している参照先フルパスを書き換える↓この部分
Set WordDoc = WordApp.Documents.Open(“C:\Users\akira\OneDrive\デスクトップ\Word 文書.docx“)’

 

 

'
'
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
'

 

 

●実行前~実行後 ※プログラム実行後、フルパスを指定したWordファイルが立ち上がりました。
(画面クリックして拡大)

 

 

 

 

 

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行以降~ ※何行でもよい)

 

 

'
'
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シートに記載している文書(議事録)が新規作成されたWordへ文書内容が転記されました。
(画面クリックして拡大)

 

 

 

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“)

 

 

'
'
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
'

 

 

 

●実行前~実行後 ※プログラム実行後、既存のWordファイル「宴会案内.Doc」を起動して、EXCELシートに記載している文書を既存Wordファイルへ追記されました。
(画面クリックして拡大)

 

 

 

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を参照してください。

https://docs.microsoft.com/ja-jp/office/vba/word/concepts/miscellaneous/predefined-bookmarks?redirectedfrom=MSDN

 

 

'
'
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
'

 

●実行前~実行後 ※プログラム実行後、既存のWordファイル「販売報告.Doc」を起動して、EXCELシートに記載している文書を既存Wordファイルへ追記されました。
(画面クリックして拡大)

 

 

 

 

EXCEL VBAから既存のWordファイルを起動して、EXCELデータに記載している表データを既存Word文書の末尾へ追記し最後にWordファイルを上書き保存する。

 

 

●プログラム説明 (サンプル⑤)

下記のサンプルプログラムは、サンプルプログラムの追加プログラムになります。既存のWordファイルに、EXCELの表を追記して最後にWordファイルを上書き保存するサンプルプログラムです。

【書式説明】Closeメゾットを利用してWordファイルを保存・選択・保存しない

●Documetオブジェクト.Close 定数

定数内容(説明)
wdSaveChangesファイルを上書き保存する
wdDoNotSaveChangesファイルを保存しない。

★【プログラムの流れ】・【プログラムの実行条件】につきましては、上記サンプル④を参照して下さい。

 

'
'
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に関するテクニックや便利な手法などをこのサイトに掲載していきますので、定期的に参照していただけると幸いです。

 

AKIRA