Excel VBA ファイルを開く4つの方法と7つのひな形

ファイル/フォルダ操作

今回は、ファイルを開く4つの方法を7つのひな形でご紹介します。

コードのひな形ですので、説明は極力省略します。

詳細については下記記事をご覧ください。

1.ファイル名を指定してファイルを開く

ファイル名をフルパスで指定して、ファイルを開きます。

1つのファイルを開く

指定したファイルのみ開く方法です。

Sub Sample1()

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

同じフォルダのファイルをすべて開く

指定したファイルと同じフォルダにあるファイルをすべて開く方法です。

「.CurrentDirectory = “C:\Sample\”」でカレントフォルダも指定しています。

“C:\Sample\”の部分はサンプル用なので適宜変更してください。

Sub Sample2()

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

2.ダイアログでファイルを指定して開く

ダイアログボックスを開いて、ユーザーが指定したファイルを開きます。

「.CurrentDirectory = “C:\Sample\”」でカレントフォルダも指定しています。

“C:\Sample\”の部分はサンプル用なので適宜変更してください。

1ファイルのみ選択

1つのファイルのみ選択して開く方法です。

Sub Sample3()

    Dim FileName As Variant
    
    With CreateObject("WScript.Shell")
    
        .CurrentDirectory = "C:\Sample\"
        
    End With
    
    FileName = Application.GetOpenFilename("Excelブック,*.xlsx,Excelマクロ,*.xlsm,CSV,*.csv,テキスト,*.txt")
    
    If FileName <> "False" Then
    
        Workbooks.Open FileName
        
    End If
    
End Sub

複数のファイルを選択

ダイアログボックスで複数のファイルを選択して開く方法です。

Sub Sample4()

    Dim FileName As Variant
    Dim OpenFile As Variant
    
    With CreateObject("WScript.Shell")
    
        .CurrentDirectory = "C:\Sample\"
        
    End With
    
    FileName = Application.GetOpenFilename("Excelブック,*.xlsx,Excelマクロ,*.xlsm,CSV,*.csv,テキスト,*.txt", MultiSelect:=True)
    
    If IsArray(FileName) Then
    
        For Each OpenFile In FileName
    
        Workbooks.Open OpenFile
        
        Next
        
    End If
    
End Sub

3.指定したフォルダ内のファイルをすべて開く

指定されたフォルダ内のファイルをすべて開く方法です。

「.CurrentDirectory = “C:\Sample\”」でカレントフォルダも指定しています。

“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

ダイアログでフォルダを指定する

ダイアログボックスを表示して、フォルダを指定してファイルを開く方法です。

Sub Sample6()

Dim Filename    As String
Dim IsBookOpen  As Boolean
Dim OpenBook    As Workbook
Dim myFolder As Variant

With Application.FileDialog(msoFileDialogFolderPicker)

    If .Show <> 0 Then
    
        myFolder = .SelectedItems(1)
    
    End If

End With

With CreateObject("WScript.Shell")
    
    .CurrentDirectory = myFolder
    
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

4.指定フォルダのサブフォルダを取得して、サブフォルダ内のすべてのファイルを開く

指定したフォルダ内のサブフォルダ内のファイルをすべて開く方法です。

Sub Sample7()

Dim myFolder    As Variant
Dim Fso         As Object
Dim GetFolder   As Object
Dim Fol         As Object
Dim Filename    As String
Dim IsBookOpen  As Boolean
Dim OpenBook    As Workbook

Set Fso = CreateObject("Scripting.FileSystemObject")

With Application.FileDialog(msoFileDialogFolderPicker)

    If .Show <> 0 Then
    
        myFolder = .SelectedItems(1)
    
    End If

End With

Set GetFolder = Fso.GetFolder(myFolder)


For Each Fol In GetFolder.SubFolders


With CreateObject("WScript.Shell")

    .CurrentDirectory = Fol

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

Next

Set GetFolder = Nothing

End Sub

5.まとめ

基本的に上記の7つのひな形はコピペで動きます。

7つの方法で基本的なファイルを開くコードは対応できるかと思います。

細かいエラー処理や、フォルダ、ファイルのフィルタリングはその時の用途に合わせて、調整してください。

また、上記以外にもいろいろな方法がありますので、そのコードに適した方法を使用するといいかもしれません。

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