【Excel VBA】ファイルを開く、ファイルを閉じる

Excel VBA講座 開講中!

Excel VBAにおいては、色々な方法でファイルを開く事ができます。
今回は、何種類かの方法をご紹介します。

※本ページはプロモーションが含まれています

スポンサーリンク
スポンサーリンク

ダイアログボックスから選択したファイルを開く

下記のサンプル1は、Application.GetOpenFilenameでファイルを選択するダイアログボックスを表示させ、選択したファイル名(パスを含む)を変数Fileに代入しています。

If File ~ End Ifは、ダイアログボックスでキャンセルボタンをクリックした場合の処理です。
これがないと、キャンセルボタンをクリックした際にエラーになるので注意が必要です。

そして

Set wb = Workbooks.Open(FileName:=File)

でファイルを開きます。

・サンプル1

Sub 選択したファイルを開く()

Dim File As Variant
Dim wb As Workbook

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
Dim wb As Workbook

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
Dim File As String
Dim wb As Workbook
Dim sh As Worksheet
Dim i As Long
Dim MaxRow As Long

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

 

タイトルとURLをコピーしました