Home

Word VBAで、Excelを利用する

新規作成日 2017-03-11
最終更新日

VBAの機能を備えているアプリケーションは、相互に相手のオブジェクトを外部オブジェクトとして取得し、操作することが可能です。

外部オブジェクトの参照

コードの記述段階で外部オブジェクトに属するキーワードを使用したい場合、 つまり、インテリセンス(コードの入力補助)の候補を表示したい場合は、参照設定する必要があります。

VBEで、[ツール]→[参照設定]を選択します。

VBEで、[ツール]→[参照設定]を選択します。

「Microsoft Excel 15.0 Object Library」を追加します。

ライブラリファイル欄で、「Microsoft Excel 15.0 Object Library」をクリックして、チェックボタンを付け、OKボタンをクリックします。

  • Excel 2013→Excel 15
  • Excel 2010→Excel 14
  • Excel 2007→Excel 12

この設定を行うことで、変数宣言で、「As Excel.Application」が利用できます。設定していない場合は、「As Object」を使用します。

外部オブジェクトを追加する

外部オブジェクトは、そのままでは、Word VBAの中には存在しません。その為、利用する前に、外部オブジェクトを追加する操作が必要です。 CreateObject関数を使用します。

Excelシートを指定するには、GetObject関数を使用します。

Ecxelオブジェトのオブジェクト変数を宣言し、Excelオブジェクトを追加します。

WordVBAを使用して、ExcelBookを開く

では、早速、WordVBAを使用して、ExcelBookを開いてみましょう。

「Microsoft Excel 15.0 Object Library」を追加した場合

Sub OpenExcel()
'Excelファイルを開くマクロ
‘*** 参考 http://www.atmarkit.co.jp/ait/articles/1512/17/news020.html ***

Dim ExBk As Excel.Workbook 'Excel. Workbookを格納するための変数
Dim BkPath As String  '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数

'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"

Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")
ExBk.Application.Visible = True
'マクロが終了するとExcelファイルは閉じられます。

Set ExBk = Nothing   'ExBkを解放する

End Sub

「Microsoft Excel 15.0 Object Library」を追加ていない場合(インテリセンスの動作が期待できない。)

Sub OpenExcelUseObject()
'Excelファイルを開くマクロ

Dim ExBk As Object 'Excel.Workbookを格納するための変数
Dim BkPath As String  '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数

'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"

Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")
ExBk.Application.Visible = True
'マクロが終了するとExcelファイルは閉じられます。

Set ExBk = Nothing   'ExBkを解放する

End Sub

WordVBAを使用して、ExcelBook上の特定のセル内のデータを取得する

WordVBAから、Excelブック内の特定のセル内のデータを取得し、メッセージボックスに表示します。

CellsプロパティもRangeプロパティも利用できることが確認できました。

メッセージボックスに取得した文字列が表示される

セル"A3"には、「データー」という文字列が格納されていたことが確認できました。

Sub GetExcelData()
'Excelファイルから、セルの中のデータを取得するマクロ

Dim ExBk As Excel.Workbook 'Excel.Workbookを格納するための変数
Dim BkPath As String  '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数

Dim myStr As String '文字列を格納する変数

'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"

Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")


'Excelから、セルのデータを取得する

myStr = ExBk.Worksheets(1).Cells(3, 1).Value    'Cellsプロパティでセルを指定

'myStr = ExBk.Worksheets(1).Range("A3").Value   'Rangeプロパティでセルを指定

'取得した文字列をメッセージボックスで表示する。

MsgBox (myStr)

Set ExBk = Nothing   'ExBkを解放する

End Sub

WordVBAを使用して、Excelブック上の特定の行の最終行を取得する(利用できない。)

最終行の特定は、Excelマクロを使用する際、頻繁に使用する操作です。

Endプロパティは、使用できない

残念ながら、Endプロパティは、使用できないようです。

Sub GetExcelLastCell()
'Excelファイルから、セルの中のデータを取得するマクロ(Endプロパティが利用できないので実行できない)

Dim ExBk As Excel.Workbook 'Excel.Workbookを格納するための変数
Dim BkPath As Integer  '「置換リスト」(開くExcelファイル)の存在するパスを格納する変数

Dim LastRow As Long '文字列を格納する変数

'「置換リスト.xlsx」が存在するパス変数に格納
BkPath = "H:\Data\development\CAD\Fusion360\Fusion360入門書\リライト原稿\置換マクロ"

Set ExBk = GetObject(BkPath & "\" & "置換リスト.xlsx")


'Excelから、セルのデータを取得する

LastRow = ExBk.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).row    '最終セルの行数

'取得した値をメッセージボックスで表示する。

MsgBox (LastRow)

Set ExBk = Nothing   'ExBkを解放する

End Sub

参考:入力されているデータの最終セルを取得する

このエントリーをはてなブックマークに追加