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