Excel VBA ファイル名を指定してファイルを開く

ファイル/フォルダ操作

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コレクションをループして、取得しているファイル名と同一か判定します。

最後にファイルを開きます。

それを取得ファイル名が空白判定になるまでループして全てのファイルを開きます。

これで、指定したフォルダ内のファイルが全て開かれます。

タイトルとURLをコピーしました