ExcelVBAを使って業務の自動化を進める中で、「毎回同じフォルダ内のファイルを開く」処理は非常に多く見られます。本記事では、特定のフォルダを指定してExcelファイルを自動で開く方法について、初心者の方にもわかりやすく解説していきます。
目次
フォルダ指定でファイルを開く処理とは?
ExcelVBAでの「フォルダ指定」とは、特定のパス(例:"C:\Users\〇〇\Documents\報告書")を明示的に記述し、その中にあるファイルを開く処理を指します。
この操作は、たとえば以下のような場面で役立ちます。
- 日次レポートなど、毎日決まった場所に保存されるファイルを開く
- 一括処理のために特定フォルダ内の全ファイルを順に開く
- ユーザーに任意のフォルダを選択させてファイルを開く
では、実際のVBAコードを例にしながら、具体的な方法を見ていきましょう。
✅ 基本:パスを直接指定してファイルを開く
まずは、最もシンプルな「パスを直接指定して1つのファイルを開く」方法です。
Sub OpenFileDirect()
Dim filePath As String
filePath = "C:\Users\Daichi\Documents\report.xlsx"
Workbooks.Open Filename:=filePath
End Sub
このコードでは、変数 filePath にファイルのフルパスを代入し、それを Workbooks.Open で開いています。拡張子まで正確に記述する必要がある点に注意しましょう。
✅ フォルダ内の全Excelファイルを開く
次に、指定したフォルダ内にあるすべてのExcelファイル(".xlsx"や".xls"など)を順に開く方法をご紹介します。
Sub OpenAllExcelFilesInFolder()
Dim folderPath As String
Dim fileName As String
folderPath = "C:\Users\Daichi\Documents\レポート\" ' フォルダパス
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
fileName = Dir(folderPath & "*.xls*") ' 拡張子がxlsで始まるすべてのファイルを対象にする
Do While fileName <> ""
Workbooks.Open folderPath & fileName
fileName = Dir()
Loop
End Sub
この方法では、Dir 関数を使ってフォルダ内のすべてのExcelファイルを取得し、Workbooks.Open で順に開いています。
✅ ユーザーにフォルダを選ばせてファイルを開く
ユーザーが任意にフォルダを選択して、そこにあるファイルを開きたいケースも多いでしょう。その場合は、FileDialog を使うことで柔軟に対応できます。
Sub OpenFileFromUserSelectedFolder()
Dim fd As FileDialog
Dim folderPath As String
Dim fileName As String
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then ' OKが押されたとき
folderPath = fd.SelectedItems(1)
If Right(folderPath, 1) <> "\" Then folderPath = folderPath & "\"
fileName = Dir(folderPath & "*.xlsx")
Do While fileName <> ""
Workbooks.Open folderPath & fileName
fileName = Dir()
Loop
End If
End Sub
このコードは、ユーザーにフォルダ選択ダイアログを表示し、選ばれたフォルダ内のExcelファイルをすべて開く仕組みです。
【VBA】ダイアログで名前を付けて保存・同じフォルダに保存する方法
✅ エラー処理を加える:ファイルが存在しない場合の対策
ファイルやフォルダが存在しない場合に備えたエラーハンドリングを追加することで、実用性がさらに向上します。
Sub OpenFileWithErrorHandling()
Dim filePath As String
filePath = "C:\Users\Daichi\Documents\report.xlsx"
If Dir(filePath) = "" Then
MsgBox "指定されたファイルが存在しません。", vbExclamation
Exit Sub
End If
Workbooks.Open Filename:=filePath
End Sub
このように Dir 関数で事前にファイルの存在を確認してから処理を行うことで、不要なエラーを回避できます。
【VBA】 フォルダ内のファイル名を順番に取得してExcelに書き出す方法
✅ ファイル選択ダイアログで1ファイルを指定して開く
最後に、ユーザーが任意の1ファイルを選んで開く方法も紹介しておきます。
Sub SelectAndOpenSingleFile()
Dim fd As FileDialog
Dim selectedFile As String
Set fd = Application.FileDialog(msoFileDialogFilePicker)
With fd
.Title = "開くファイルを選択してください"
.Filters.Clear
.Filters.Add "Excelファイル", "*.xls; *.xlsx; *.xlsm"
.AllowMultiSelect = False
If .Show = -1 Then
selectedFile = .SelectedItems(1)
Workbooks.Open Filename:=selectedFile
End If
End With
End Sub
このコードでは、ユーザーが1ファイルを選択するダイアログを表示し、その選択されたファイルを開きます。より柔軟なファイル操作が求められる現場で重宝される方法です。
■まとめ:業務効率化の第一歩はファイルの自動化から
ExcelVBAを使ったファイル操作は、業務自動化の最初のステップとして非常に効果的です。特定フォルダからのファイル取得は、その後のデータ集計やレポート生成の前提になるため、まずは確実にマスターしておきたいテクニックです。
今回紹介したように、単純なパス指定だけでなく、フォルダ内の一括処理やユーザー選択の活用により、実用性を格段に向上させることができます。
業務で繰り返し行っている手作業をVBAで自動化することにより、時間の削減とヒューマンエラーの防止に大きな効果を発揮します。ぜひこの記事を参考に、VBAによるファイル操作を実践に取り入れてみてください。