今回は、ファイルを開く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つの方法で基本的なファイルを開くコードは対応できるかと思います。
細かいエラー処理や、フォルダ、ファイルのフィルタリングはその時の用途に合わせて、調整してください。
また、上記以外にもいろいろな方法がありますので、そのコードに適した方法を使用するといいかもしれません。