更新日:、 作成日:

VBA ワークブックを開く

はじめに

Excel VBA マクロでワークブックを開く方法を紹介します。

Workbooks.Open メソッドから、ブックを開けます。テキストファイルや CSV ファイルも開けます。

Application.GetOpenFilename メソッドから、ファイルを開くダイアログを表示できます。

ブックを閉じるには「ワークブックを閉じる」をご覧ください。
ファイルを読み込むには「ファイルの読み込み」をご覧ください。

ブックを開く

ブックを開くには Workbooks.Open("D:\Book2.xlsx") または Workbooks.Open("Book2.xlsx") のように入力します。大文字と小文字は区別しません。

Dim wb As Workbook
Set wb = Workbooks.Open("D:\Book1.xlsx") ' ブックを開く
Set wb = Workbooks.Open("Book1.xlsx")    ' ブックを開く
Debug.Print(wb.FullName)

ファイル名だけ指定したときのパスはカレントディレクトリです。カレントディレクトリの既定値は、Excel のオプションから保存の「既定のローカルファイルの保存場所」です。

default-path
カレントディレクトリは、ファイルを開くダイアログや名前を付けて保存ダイアログを使用すると変更されます。このため必ず絶対パスを使用します。

開いたブックがアクティブになります。すでに開いているブックを開いたときは、そのブックがアクティブになります。

違うパスにある同じファイル名のブックを開いたときはなにもしないで、Nothing を返します。Excel の仕様で同じ名前のブックを同時に開くことはできません。

ブックを開いた後に VBA を実行しているブックをアクティブにするには ThisWorkbook.Activate を入力します。

Call Workbooks.Open("D:\Book2.xlsx") ' 開いたブックがアクティブになる
ThisWorkbook.Activate                ' VBA を実行しているブックをアクティブ

指定したファイルが存在しないときは「エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。」が発生します。

ファイルの存在チェックをするには「ファイルの存在確認」をご覧ください。

ファイルを開く

ブックを開くのと同じ方法でテキストファイルや CSV ファイルを開けます。

Dim wb As Workbook
Set wb = Workbooks.Open("D:\Text.txt") ' テキストファイルを開く
Set wb = Workbooks.Open("Comma.csv")   ' CSV ファイルを開く
Debug.Print(wb.FullName)

ファイルを開いた時もそのファイル名がブック名になります。

ファイルを開くダイアログを表示する

ファイルを開くダイアログから選択したファイルのパスを取得できます。

ファイルを開くダイアログを表示するには Application.GetOpenFilename メソッドを使用します。

戻り値に選択したファイルの絶対パスを返します。キャンセルすると False を返します。

2
Dim filePath As Variant
filePath = Application.GetOpenFilename ' ダイアログを表示

If filePath = False Then
    Exit Sub ' キャンセル
End If

' 開く
Call Workbooks.Open(filePath) ' ブックを開く

ダイアログは開くファイルのパスを取得するだけで開いてはいません。ダイアログを表示した後に開く処理をする必要があります。

ファイルを選択すると、カレントディレクトリがそのパスになります。

ブックのパスを取得する

開いたブックのパスを取得するには Workbook.FullName のように入力します。

Dim wb As Workbook
Set wb = Workbooks.Open("D:\Book2.xlsx") ' ブックを開く

Dim s As String
s = wb.FullName ' D:\Book2.xlsx
s = wb.Name     ' Book2.xlsx
s = wb.Path     ' D:
Debug.Print(s)
詳しくは「ワークブック名やパスを取得する」をご覧ください。
ファイルのパスを取得するには「ファイルやフォルダのパスを取得」をご覧ください。

開いたブックを編集する

Open の戻り値から開いたブックを取得できます。

Dim wb As Workbook
Set wb = Workbooks.Open("D:\Book2.xlsx") ' 戻り値から開いたブックを取得

' そのブックを編集
wb.Sheets(1).Range("A1").Value = "編集"