【Excel VBA入門】Excelファイルの開き方とエラー対策

【Excel VBA入門】Excelファイルの開き方とエラー対策

ファイルの開き方とエラー対策

こんにちは、吉池(@valmore_myoshi)です。

今回はExcel VBAを使ってExcelファイルを開く方法を解説します。ファイル操作につきもののエラー対策もあわせて見ていきましょう。

他のファイルからデータを取得したり、別ファイルにデータを転記するときにファイルを開く操作が役立ちます。

ファイルを開くにはWorkbooks.Openメソッドを使う

Workbooks.Openメソッドにパスを指定することでファイルを開きます。開いたファイルは一番前面(アクティブ)になっているので、続けて操作する場合はActiveWorkbookで指定できます。

Option Explicit

Sub OpenWorkBook()
    Dim wb As Workbook
    
    Workbooks.Open ("C:\path\to\file.xlsx")
    Set wb = ActiveWorkbook
    
    ' 開いたファイルを操作
    
    wb.Close
End Sub

エラーが発生する原因と対策

Excel VBAからファイルを開くときにエラーが発生する原因は2つあります。各エラーの対策方法をみていきましょう。

ファイルが存在しない場合

指定されたファイルが存在しなければ当然エラーになります。エラーを防ぐために事前にチェックしましょう。

ファイルの存在チェックにはDir関数を使用します。ファイルパスを指定し、存在すればファイル名、存在しなければ空文字を返します。今回は空文字が返ってこなければファイルを開くようにしました。

Option Explicit

Sub OpenWorkBook()
    Dim wb As Workbook
    Const path As String = "C:\path\to\file.xlsx"
    
    If Dir(path) <> "" Then
        Workbooks.Open path
    Else
        MsgBox "ファイルが存在しません"
        Exit Sub
    End If
    
    Set wb = ActiveWorkbook
    
    ' 開いたファイルを操作
    
    wb.Close
End Sub

同名ファイルをすでに開いている場合

すでに開いているファイルと同名のファイルを開くときもエラーになります。ファイルパスは関係なく、ファイル名が基準になっています。そのため、以下のファイルはすべて同名と判定されます。

  • C:\test.xlsx
  • C:\Users\test.xlsx
  • C:\Users\user\Documents\test.xlsx

これから開くファイルとすでに開いているファイルの名前を一つずつ比較しましょう。開きたいファイルの名前はDir関数にパスを指定することで取得できます(ファイルが存在すれば)。

次に今開いているExcelファイルはWorkbooksで調べられます。For Each構文を利用して一つずつファイル名を比較しましょう。

Option Explicit

Sub OpenWorkBook()
    Dim fileName As String, wb As Workbook, wbTemp As Workbook
    Const path As String = "C:\path\to\file.xlsx"

    ‘ 開きたいファイルの名前を取得
    fileName = Dir(path)
    
    For Each wbTemp In Workbooks
        If wbTemp.Name = fileName Then
            MsgBox "同名ファイルを開いています"
            Exit Sub
        End If
    Next wbTemp
    
    Workbooks.Open path
    Set wb = ActiveWorkbook
    
    ' 開いたファイルを操作
  
    wb.Close
End Sub

まとめ

Excel VBAを使ってファイルを開きたいと思うことはよくあります。頻繁に使うからこそ、予期せぬトラブルを防ぐためにエラー対策しておきましょう。