VBAでファイル名を指定して、ファイルを開く方法をご説明します。
ファイルを開く方法はいくつかありますが、今回はファイル名を直接指定する方法です。
ファイルを開く場合は「Openメソッド」を使用します。
すでに開いているファイルを操作した場合に発生するエラー対策や、同じフォルダ内の複数のファイルをループで開く場合なども、順にご説明します。
また、他にもファイルを開く方法がありますので、下記記事をご覧ください。
1.別ブック(ファイル)を開く
別ファイルを開く場合は、「Openメソッド」を使用します。
ファイルを開くコードは次のように「フォルダパス+ファイル名」で指定して記述します。
シンプルに書くと次のようなコードになりますが、下記コードはファイルが存在しない場合にエラーになります。
Sub Sample1()
Workbooks.Open "C:\Sample\Book1.xlsx"
End Sub
引数名を省略しないで記述すると、次のようになります。
Sub Sample2()
Workbooks.Open Filename:="C:\Sample\Book1.xlsx"
End Sub
2.ファイルの存在をチェックする
直接フルパスでファイルを指定する場合に、存在しないファイル名を指定してファイルを開こうとした場合、対策していないとエラーになります。
そこで、指定したフォルダやファイルが存在しているかチェックします。
ファイルの存在をチェックするには「Dir関数」を使用するか、「FileExistsメソッド」を使用します。
Dir関数でファイルをチェック
「Dir関数」は指定したファイルのファイル名を返します。
また、存在しない場合には空白を返します。
空白じゃない場合にオープンします。
Sub Sample3()
If Dir("C:\Sample\Book1.xlsx") <> "" Then
Workbooks.Open "C:\Sample\Book1.xlsx"
End If
End Sub
FileExistsメソッドでチェック
もう1つの方法が、FileSystemObjectのExistsメソッドです。
こちらは、指定したファイルが存在する場合はTrueを返します。
Dir関数の方が簡単ですが、こちらの方法でもチェックする事ができます。
Sub Sample4()
Dim Target As String
Target = "C:\Sample\Book1.xlsx"
With CreateObject("Scripting.FileSystemObject")
If .FileExists(Target) Then
Workbooks.Open Target
End If
End With
End Sub
3.ループで同じフォルダのファイルをすべて開く
同じフォルダ内のファイルをループで、すべて開く方法です。
コードが長く、意味も少し難しいのでサンプルコードをコピーして、自分の環境に置き換えて使うといいかもしれません。
「.CurrentDirectory = “C:\Sample\”」のフォルダ名部分を書き換えるだけで使用できます。
Sub Sample5()
Dim Filename As String
Dim IsBookOpen As Boolean
Dim OpenBook As Workbook
With CreateObject("WScript.Shell")
.CurrentDirectory = "C:\Sample\"
End With
Filename = Dir("*.xlsx")
Do While Filename <> ""
If Filename <> ThisWorkbook.Name Then
IsBookOpen = False
For Each OpenBook In Workbooks
If OpenBook.Name = Filename Then
IsBookOpen = True
Exit For
End If
Next
If IsBookOpen = False Then
Workbooks.Open (Filename), UpdateLinks:=1
End If
End If
Filename = Dir()
Loop
End Sub
コードの説明
少し長いですが、順にコードの説明をします。
「CreateObject(“WScript.Shell”)」でカレントフォルダを指定しています。
「アクティブのフォルダはここです」という意味です。
フォルダの指定をしたあとは「Dir」にワイルドカードを使用して「.xlsx」を含むファイル名を、順番にループで取得します。
「If Filename <> ThisWorkbook.Name Then」はファイル名がThisworkbook(マクロの書かれたファイル)と同じか判定しています。
次にWorkbooksコレクションをループして、取得しているファイル名と同一か判定します。
最後にファイルを開きます。
それを取得ファイル名が空白判定になるまでループして全てのファイルを開きます。
これで、指定したフォルダ内のファイルが全て開かれます。