VBAで自動化 VBA一覧 ファイル・印刷操作 ファイル操作

【VBA】フォルダ指定してファイルを開く方法|初心者にもわかる実践ガイド

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 で順に開いています。

【VBA】繰り返し処理の回数を指定して実行する方法と活用例

✅ ユーザーにフォルダを選ばせてファイルを開く

ユーザーが任意にフォルダを選択して、そこにあるファイルを開きたいケースも多いでしょう。その場合は、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によるファイル操作を実践に取り入れてみてください。

    -VBAで自動化, VBA一覧, ファイル・印刷操作, ファイル操作