Excel VBAにおいては、色々な方法でファイルを開く事ができます。
今回は、何種類かの方法をご紹介します。
ダイアログボックスから選択したファイルを開く
下記のサンプル1は、Application.GetOpenFilenameでファイルを選択するダイアログボックスを表示させ、選択したファイル名(パスを含む)を変数Fileに代入しています。
If File ~ End Ifは、ダイアログボックスでキャンセルボタンをクリックした場合の処理です。
これがないと、キャンセルボタンをクリックした際にエラーになるので注意が必要です。
そして
Set wb = Workbooks.Open(FileName:=File)
でファイルを開きます。
・サンプル1
Sub 選択したファイルを開く() Dim File As Variant File = Application.GetOpenFilename If File = False Then ‘キャンセル時の処理 MsgBox “キャンセルしました。” Exit Sub End If Set wb = Workbooks.Open(FileName:=File) End Sub |
ファイル名を指定して開く
下記のサンプル2では、まず変数FolderNameにフォルダ名を代入しています。
この時のフォルダ名は、フォルダのパスとファイル名の両方が必要です。今回は、
ThisWorkbook.Path
を使用して、このプログラムが存在しているファイルと同じフォルダを参照しています。
そして、
Set wb = Workbooks.Open(FileName:=FolderName)
でファイルを開きます。
この際、ファイル名の指定はファイルが存在するパスから拡張子まで指定する必要がありますので注意が必要です。
・サンプル2
Sub ファイル名を指定して開く() Dim File As Variant File = ThisWorkbook.Path & “\テスト.csv” Set wb = Workbooks.Open(FileName:=File) End Sub |
ファイル名を連続して指定しながら開き、閉じる
下記のサンプル3は、シート上に存在するファイル名の一覧を順に取得しながら、指定フォルダのファイルを開いては閉じる、というサンプルです。
まず変数shでは、ファイル名一覧が存在するシート名を指定しています。
先ほどまでのサンプルではシート名の指定はしていませんでしたが、
今回はファイル名一覧が存在するファイルとは別のファイルを開いた際にアクティブシートがそちらに移ってしまい、
2つ目のファイル名を取得する事ができなくなってしまうため、今回はこのような形をとっています。
変数MaxRowにはファイル名一覧が存在するシートの最終行の数値を代入しています。
For i以降は、変数Fileに、ファイル名を1つずつ代入していきます。
変数FolderNameにファイルのパスを代入し、
Set wb = Workbooks.Open(FileName:=FolderName)
で開きます。
Application.DisplayAlerts = Falseは、ファイルを閉じる際などの確認メッセージを表示させないためのものです。
今回は開いたファイルに変更を加えないためそもそも確認メッセージは表示されないのですが、もし開いたファイルになんらかの変更を加える場合、ファイルを閉じる度に確認メッセージが表示されるため、確認メッセージが不要な場合は必要な処理です。
最後に
wb.Close
でファイルを閉じ
Application.DisplayAlerts = True
で再び確認メッセージが表示されるよう、元に戻しています。
・サンプル3
Sub ファイル名を指定して開く2() Dim FolderName As String Set sh = Worksheets(“シート”) ‘シート名を変数に格納 MaxRow = sh.Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To MaxRow File = sh.Cells(i, 1).Value FolderName = ThisWorkbook.Path & “\” & File & “.csv” Set wb = Workbooks.Open(FileName:=FolderName) Application.DisplayAlerts = False wb.Close Application.DisplayAlerts = True Next i End Sub |