大体でIT
大体でIT
2020/12/18
Excel VBAで、フォルダを指定してワイルドカードを使って、ファイルを開く方法について、ご紹介します。Dirとワイルドカードを使えば、フォルダ内のファイル名を取得できます。ワイルドカードのメリットは、ファイル名が変更になっても、フォルダ内のファイル名を取得できることです。ファイルを開く方法がわかれば、複数ファイルのデータ取得ができたりするので、実務に活かせます。
この記事では、フォルダを指定してワイルドカードを使って、ファイルを開く方法について、ご紹介します。
「Dir」で「ワイルドカード」を使うと、フォルダ内のファイル名を取得することができます。
ワイルドカードを使うメリットは、ファイル名が変わっても、ファイル名を取得することができることです。
また、拡張子を指定することもできるので、かなり便利です。
では、Dirとワイルドカードを使って、ファイルを開く方法について解説していきます。
Dirとワイルドカードでファイルを開く
フォルダ選択用ダイアログでファイルを開く
初めに、ファイルを開く方法について、ポイントとなるVBAコードをまとめます。
VBAコードだけ確認したい場合に、ご活用ください。
'Dirとワイルドカードで、ファイルを開く
FileName = Dir(ThisWorkbook.Path & "\保存\*") 'フォルダ内のファイル名を取得
FilePath = ThisWorkbook.Path & "\保存\" & FileName 'ファイルパスを作成
Workbooks.Open FileName:=FilePath 'ファイルを開く
'フォルダ選択用ダイアログとワイルドカードで、ファイルを開く
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path '現在のフォルダパス
If .Show = False Then Exit Sub
FolderPath = .SelectedItems(1) 'フォルダパスを取得
End With
FileName = Dir(FolderPath & "\*") 'フォルダ内のファイル名を取得
FilePath = Path & "\" & FileName 'ファイルパスを作成
Workbooks.Open FileName:=FilePath 'ファイルを開く
フォルダを指定して、ファイルを開く方法について、ご紹介します。
フォルダパスを指定して、その中のファイルを取得する方法です。
この方法を使うと、ファイル名が変更されても、ファイルパスを取得することができるようになります。
ファイル名が変更される場合は、ファイル名に日付を追加する場合とかですね。
フォルダパスを指定して、ワイルドカードでファイルパスを取得する方法です。
Sub TEST1()
Dim FolderPath, FilePath, FileName
'フォルダパスを指定
FolderPath = ThisWorkbook.Path & "\保存"
'フォルダ内のファイル名を取得
FileName = Dir(FolderPath & "\*")
'ファイルパスを作成
FilePath = FolderPath & "\" & FileName
'ファイルを開く
Workbooks.Open FileName:=FilePath
End Sub
『Dir』でワイルドカードを使うのが、ポイントです。
『ファイル名 = Dir(フォルダパス & "\*")』と入力することで、フォルダ内のファイル名を取得することができます。
では、試してみるフォルダ構造は、次のようになります。
フォルダ構造
「保存」フォルダの中に「TEST.xlsx」ファイルが入っています。
ファイルを開く
次は、フォルダ選択用ダイアログとワイルドカードを使って、ファイルを開いてみます。
Sub TEST2()
Dim FolderPath, FilePath, FileName
'フォルダ選択用ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path '現在のフォルダパス
If .Show = False Then Exit Sub
FolderPath = .SelectedItems(1) 'フォルダパスを取得
End With
FileName = Dir(FolderPath & "\*") 'フォルダ内のファイル名を取得
FilePath = FolderPath & "\" & FileName 'ファイルパスを作成
Workbooks.Open FileName:=FilePath 'ファイルを開く
End Sub
フォルダ選択用のダイアログは、次のように記載します。
フォルダ選択用のダイアログ
'フォルダ選択用ダイアログを表示
With Application.FileDialog(msoFileDialogFolderPicker)
.InitialFileName = ThisWorkbook.Path '現在のフォルダパス
If .Show = False Then Exit Sub
FolderPath = .SelectedItems(1) 'フォルダパスを取得
End With
あとは、先ほどと同じで、「Dir」を使ってフォルダ内のファイル名を取得して、ファイルを開きます。
フォルダ構成
フォルダ選択用のダイアログが表示
ファイルが保存されている「保存」フォルダを選択します。
ファイルを開く
ワイルドカードを使ってファイルを開く方法は、ファイル名が変更されてもファイルを開けるのがメリットです。
ファイル名を変更
では、フォルダパス指定とワイルドカードで取得するVBAコードを実行してみます。
Sub TEST3()
Dim FolderPath, FilePath, FileName
'フォルダパスを指定
FolderPath = ThisWorkbook.Path & "\保存"
'フォルダ内のファイル名を取得
FileName = Dir(FolderPath & "\*")
'ファイルパスを作成
FilePath = FolderPath & "\" & FileName
'ファイルを開く
Workbooks.Open FileName:=FilePath
End Sub
ファイルを開く
ファイル名を変更しても同じVBAコードで、ファイルを開くことができました。
これが、Dirを使ったワイルドカードのメリットです。
「Dir」と「ワイルドカード」を使って、拡張子を指定してファイルを開くこともできます。
次のVBAコードは、フォルダの中から、CSVファイルを開くものです。
Sub TEST4()
Dim FolderPath, FilePath, FileName
'フォルダパスを指定
FolderPath = ThisWorkbook.Path & "\保存"
'フォルダ内で、CSVファイルのファイル名を取得
FileName = Dir(FolderPath & "\*.csv")
'ファイルパスを作成
FilePath = FolderPath & "\" & FileName
'ファイルを開く
Workbooks.Open FileName:=FilePath
End Sub
ポイントは、『FileName = Dir(FilePath & "\*.csv")』のところです。
ワイルドカードの指定のときに、「"\*.csv"」というように入力すると、CSVファイルのファイル名を取得することができます。
フォルダ構成
同じフォルダに、「TEST.csv」と「TEST.xlsx」が入っています。
CSVファイルを開く
ワイルドカードをうまく使うと、拡張子の指定ができます。
フォルダを指定して、複数ファイルを開くこともできます
「Dir」を使えば、同じフォルダ内の複数のファイルを開くことができます。
フォルダパスを指定して、複数のエクセルファイルを開く、というのをやってみます。
Sub TEST5()
Dim FolderPath, FileName
FolderPath = ThisWorkbook.Path & "\保存" 'フォルダパスを作成
FileName = Dir(FolderPath & "\*") '最初のファイル名を取得
Do While FileName <> ""
'ファイルを開く
Workbooks.Open FileName:=FolderPath & "\" & FileName
FileName = Dir() '次のファイル名を取得
Loop
End Sub
ポイントは、「Do While」を使って、「Dir()」をループすることです。
「Dir()」をループすることで、同じフォルダ内のファイル名を、取得することができます。
Dirをループする
FileName = Dir(FolderPath & "\*") '最初のファイル名を取得
Do While FileName <> ""
'ファイルを開く
Workbooks.Open FileName:=FolderPath & "\" & FileName
FileName = Dir() '次のファイル名を取得
Loop
フォルダ構成
「保存」フォルダに、「TEST1~TEST5.xlsx」ファイルが保存されています。
複数ファイルを開く
「TEST1~TEST5.xlsx」のファイルを開くことができました。
先ほどの複数ファイルを開くを利用して、複数ファイルのデータを取得することができます。
Sub TEST6()
'マクロファイルのシートを設定
Dim ThisWS
Set ThisWS = ThisWorkbook.ActiveSheet
Dim FolderPath, FileName
FolderPath = ThisWorkbook.Path & "\保存" 'フォルダパスを作成
FileName = Dir(FolderPath & "\*") '最初のファイル名を取得
i = 0
Do While FileName <> ""
'ファイルを開く
Workbooks.Open FileName:=FolderPath & "\" & FileName
i = i + 1
'開いたファイルから、値を取得
ThisWS.Cells(i, 1) = Workbooks(FileName).ActiveSheet.Cells(1, 1)
'開いたファイルを閉じる
Workbooks(FileName).Close
FileName = Dir() '次のファイル名を取得
Loop
End Sub
①Dirでファイル名を取得
②ファイルを開く
③開いたファイルから値を取得する
④開いたファイルを閉じる
⑤Dirで次のファイル名を取得
⑥手順②~⑤を繰り返す
フォルダ構成
「保存」フォルダの中に、「TEST1~TEST5.xlsx」のファイルを保存しています。
「TEST1~TEST5.xlsx」には、ファイル名を入力しています。
複数ファイルからデータを取得
複数のファイルから、データを取得することができました。
こんな感じで、ファイルを開くVBAコードを使うと、効率化できる業務が増えます。
この記事では、フォルダを指定してワイルドカードを使って、ファイルを開く方法について、ご紹介しました。
フォルダを指定する方法は、「ThisWorkbook.Path」と「フォルダ選択用ダイアログ」がありました。
フォルダの場所が変わらない場合には、「ThisWorkbook.Path」で、変わる場合には、「フォルダ選択用ダイアログ」を使うと便利です。
「Dir」で「ワイルドカード」を使うと、ファイル名が変わっても、ファイル名を取得することができます。
また、拡張子を指定することもできるので、かなり便利です。
「Dir」に「Do While」を使ってループすると、フォルダ内の複数のファイルを開くことができます。
参考になればと思います。最後までご覧くださいまして、ありがとうございました。