オーロラさんの勉強帳

IT企業勤務。データベース、Excel、Excel VBA、ネットワーク、LinuxなどIT関連のことを主に書いていきます。少しでもお役に立てたら幸いです。

【Excel VBA】ブックを開く(Openメソッド)、閉じる(Closeメソッド)方法

Excel VBAでワークブックを開く(Openメソッド)、閉じる(Closeメソッド)の使い方を紹介します。

 

 

Openメソッドでワークブックを開く

VBAでワークブックを開くには、WorkbooksコレクションのOpenメソッドを使います。
※Workbookオブジェクトの集合体がWorkbooksコレクション。
Openメソッドの構文は以下の通りです。

■構文
Workbooks.Open FileName

引数のFileNameは文字列型(String)で、開くワークブックのフルパスを指定します。FileNameは省略不可です。
※Openメソッドの引数は他にもありますが、本記事では一旦FileNameのみ案内します。

■サンプルコード
Workbooks.Open "C:\test.xlsx"

 

Closeメソッドでブックを閉じる

VBAでワークブックを閉じるには、WorkbooksコレクションのCloseメソッドを使います。
Closeメソッドの構文は以下の通りです。

 

■構文
Workbooks(Filename).Close

引数のFileNameはバリアント型(Variant)で、閉じるワークブックのファイル名を指定します。省略可能です。
※Closeメソッドの引数は他にもありますが、本記事では一旦FileNameのみ案内します。

 

■サンプルコード
Workbooks("test.xlsx").Close

 

※OpenメソッドのFileNameには、ファイルのフルパスを指定し、CloseメソッドのFileNameにはファイル名を指定します。
Openメソッドはどのファイルを開くかをフルパスで指定するのに対して、Closeメソッドはすでに開いているファイルを閉じるのでファイル名のみ指定します。


サンプルコード:ワークブックを開いて、閉じる

Sub sampleA_1()

 Workbooks.Open "C:\test.xlsx"
 MsgBox "ファイルを開きました。これからファイルを閉じます"
 Workbooks("test.xlsx").Close

End Sub

 


サンプルコード:ファイルの存在確認後、ファイルが存在すればファイルを開く

Sub sampleA_2()

 If Dir("C:\test.xlsx") <> "" Then
  Workbooks.Open "C:\test.xlsx"
 Else
  MsgBox "ファイルが存在しません"
  Exit Sub
 End If

 MsgBox "ファイルを開きました。これからファイルを閉じます"

 Workbooks("test.xlsx").Close

End Sub

■Dir関数
Dir関数は引数に指定したファイルが存在する場合はファイル名を返し、ファイルが存在しない場合は""(空欄)を返します。

 

サンプルコード:ファイルが存在し、かつ、現在そのファイルを開いていない場合にファイルを開く。そして閉じる。

 

Sub sampleA_3()
 Dim strFile As String, wb As Workbook
 Dim strTarget As String: strTarget = "C:\test.xlsx"

 strFile = Dir(strTarget)

 'ファイルがないない場合は、メッセージを表示し、処理を終了
 If strFile = "" Then
  MsgBox "ファイルが存在しません"
  Exit Sub
 End If

 'ファイルがすでに開いている場合は、メッセージを表示、処理を終了
 For Each wb In Workbooks
  If wb.Name = strFile Then
   MsgBox strFile & "はすでに開いています", vbExclamation
   Exit Sub
  End If
 Next wb

 Workbooks.Open strTarget
 MsgBox "ファイルを開きました。これからファイルを閉じます"
 Workbooks(strFile).Close
End Sub


■説明

Workbooksコレクションは現在開いているワークブックオブジェクトの集合です。For Each文でWorkbooksコレクションに該当ファイルがある場合は、既に開いているMsgBoxを表示し、処理を中止します。


For Each オブジェクト変数 In オブジェクト
 ~繰り返し処理を記述~
Next オブジェクト変数

サンプルコード:ダイアログボックスでファイルを選び、ファイルを開く。そして閉じる。

 
Sub sampleA_4()
 Dim strFile As String
 strFile = Application.GetOpenFilename("Microsoft Excelブック,*.xls?")
 

 If strFile <> "false" Then
  Workbooks.Open strFile
  MsgBox "ファイルを開きました。これからファイルを閉じます"
  Workbooks(Dir(strFile)).Close
 End If
End Sub

 

■説明

ApplicationオブジェクトのGetOpenFilenameメソッドでは、「ファイルを開く」ダイアログボックスで、ユーザが選択したファイルのフルパスを返します。
※GetOpenFilenameメソッドではファイルは開きません。
GetOpenFilenameメソッドで取得したファイルのフルパスを利用して、Openメソッドを使ってファイルを開きます。

 

Closeメソッドでは、フルパスからDir関数を用いてファイル名だけを取得し、ファイルを閉じています。