vba ワークブックを開く/閉じる

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 8月 1, 2022

このチュートリアルでは、VBAを使ってExcelワークブックやその他の種類のファイルをいくつかの方法で開いたり閉じたりする方法について学習します。

VBAでは、標準のメソッド.Open.Closeを使用してファイルを開いたり閉じたりすることができます。

ファイルを開こうとする前にファイルが存在するかどうかを確認する方法を知りたい場合は、このリンクをクリックしてください:VBAでファイルの存在を確認する

VBAでワークブックを開く

パスからワークブックを開く

開きたいファイルが決まっている場合は、関数内でそのファイルのフルパス名を指定することができます。以下はそのコードです。

Workbooks.Open "C:\VBA Folder\Sample file 1.xlsx"

この行は「VBA Folder」から「Sample file 1」を開きます。

ワークブックを開く – ActiveWorkbook

ワークブックを開くと、自動的にActiveWorkbookになります。 新しく開いたワークブックは、次のように参照することができます。

ActiveWorkbook.Save

シート範囲を参照する際にワークブック名を省略すると、VBAはActiveWorkbookを参照しているものと判断します。

Sheets("Sheet1").Name = "入力"

ワークブックを開いて変数に代入する

ワークブックを開いて、それを直接オブジェクト変数に代入することもできます。このプロシージャは、ワークブックをwb変数にオープンし、ワークブックを保存します。

Sub OpenWorkbookToVariable()
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\VBA Folder\Sample file 1.xlsx")

    wb.Save
End Sub

ワークブックを開くときに変数に代入しておくのは、ワークブックを管理するのに最適な方法です

ワークブックを開くファイルダイアログ

「ファイルを開く」ダイアログボックスを使ってワークブックを起動することもできます。これにより、ユーザーはファイルを選択し、開くことができます。

Sub OpenWorkbook ()

    Dim strFile As String

    strFile = Application.GetOpenFilename()
    Workbooks.Open (strFile)

End Sub

vba open file dialog in specific folder フォルダ ダイアログ

この画像にあるように、この方法では、ユーザーはどのファイルを開くかを選択することができます。ファイルを開くダイアログボックスは、大幅にカスタマイズすることができます。特定のフォルダをデフォルトにしたり、表示するファイルの種類を選択したり(例:.xlsxのみ)、その他いろいろなことが可能です。「ファイルを開く」ダイアログボックスの詳細な例については、チュートリアルをお読みください。

新しいワークブックを開く

このコードは、新しいワークブックを開くためのものです。

Workbooks.Add

新しいワークブックを開く 変数へ

このプロシージャは、新しいワークブックを開き、変数wbに代入します。

Sub OpenNewWorkbook()
    Dim wb As Workbook
    Set wb = Workbooks.Add
End Sub

ワークブックを開く構文

Workbooks.Openを使用すると、ワークブックを開く際に多くのオプションが用意されていることに気付くかもしれません。

vba open workbook syntax

Filenameは必須です。他の引数はすべて任意です。そして、おそらく他の引数のほとんどを知る必要はないでしょう。 ここでは、最も一般的な2つの引数を紹介します。

ワークブックを読み取り専用で開く

ワークブックを読み取り専用で開くと、元のファイルの上に保存することができません。これにより、ユーザーがファイルを編集することができなくなります。

Workbooks.Open "C:\VBA Folder\Sample file 1.xlsx", , True

パスワードで保護されたワークブックを開く

ワークブックがパスワードで保護されている場合があります。このコードを使用して、パスワードで保護されたワークブックを開きます。

Workbooks.Open "C:\VBA Folder\Sample file 1.xlsx", , , "password"

ワークブックを開く 構文上の注意

上の画像では、構文を示すために括弧「(」を入力していることに注目してください。 Workbooks.Openを操作する際に括弧を使用した場合は、ワークブックを変数に代入する必要があります。

Sub OpenWB()
    Dim wb As Workbook
    Set wb = Workbooks.Open("C:\VBA FolderSample file 1.xlsx", True, True)
End Sub

VBAでワークブックを閉じる

特定のワークブックを閉じる

ワークブックを開くのと同じように、ファイルを閉じるにはいくつかの方法があります。どのファイルを閉じたいのかが分かっている場合は、次のようなコードを使用することができます。

Workbooks.Close ("C:\VBA Folder\Sample file 1.xlsx")

この行は、ファイル「Sample file 1」が開かれていれば、それを閉じます。開いていない場合は、エラーを返しますので、エラー処理に注意してください。

アクティブなワークブックを閉じる

現在アクティブになっているワークブックを閉じるには、次のコードを実行します。

ActiveWorkbook.Close

開いているすべてのワークブックを閉じる

開いているすべてのワークブックを閉じるには、次のコードを使用します。

Workbooks.Close

最初に開いたワークブックを閉じる

最初に開いた/作成されたワークブックを閉じます。

Workbooks(1).Close

1を2に置き換えると、2番目に開いた/作成されたワークブックを閉じます。

保存せずに閉じる

保存プロンプトを表示せず、かつワークブックを保存せずに閉じます。

ActiveWorkbook.Close savechanges:=False

プロンプトを出さずに保存して閉じる

こちらは、保存プロンプトを表示せず、ただしワークブックを保存してから閉じます。

ActiveWorkbook.Close savechanges:=True

注:ワークブックを保存するかどうか、またプロンプトを表示するかどうかを示す方法は、他にもいくつかあります。それについては、ここで詳しく説明します。

その他のワークブックを開く例

複数の新規ワークブックを開く

このプロシージャは、複数の新しいワークブックを開き、新しいワークブックを配列に代入します。

Sub OpenMultipleNewWorkbooks()
    Dim arrWb(3) As Workbook
    Dim i As Integer
    
    For i = 1 To 3
        Set arrWb(i) = Workbooks.Add
    Next i
End Sub

フォルダ内のすべてのExcelワークブックを開く

このプロシージャは、フォルダ内のすべてのExcelワークブックを、ファイルを開くダイアログのフォルダピッカーを利用して開きます。

Sub OpenMultipleWorkbooksInFolder()
    Dim wb As Workbook
    Dim dlgFD As FileDialog
    Dim strFolder As String
    Dim strFileName As String
    Set dlgFD = Application.FileDialog(msoFileDialogFolderPicker)
    If dlgFD.Show = -1 Then
        strFolder = dlgFD.SelectedItems(1) & Application.PathSeparator
        strFileName = Dir(strFolder & "*.xls*")
        Do While strFileName <> ""
            Set wb = Workbooks.Open(strFolder & strFileName)
            
            strFileName = Dir
        Loop
    End If
End Sub

ワークブックが開かれているかどうかを確認する

このプロシージャは、ワークブックが開かれているかどうかをテストします。

Sub TestByWorkbookName()
Dim wb As Workbook
 
    For Each wb In Workbooks
        If wb.Name = "New Microsoft Excel Worksheet.xls" Then
            MsgBox "見つかりました"
            Exit Sub 'ここで終了します
        End If
    Next
 
End Sub

Workbook_Openイベント

このVBAイベントは、VBAに特定のコードの実行を指示する「トリガー」です。ワークブックのイベントは、開く、閉じる、保存前、保存後などの設定が可能です。 ワークブックが開かれたときに自動的にマクロを実行する方法については、Workbook_Openイベントのチュートリアルをご覧ください。

VBAで他の種類のファイルを開く

VBAを使用して、txtファイルやWordファイルなど、他の種類のファイルを開くことができます。

テキストファイルを開いて中身を読む

VBAのopenメソッドでは、一度ファイルを開くと、そのファイルに対して読み書きをすることができます。ファイルの中身を読むためには、INPUTとして開くのが良いでしょう。

Sub OpenTextFile()
   Dim strFile As String
   Dim strBody As String
   Dim intFile As Integer

   strFile = "C:\data\test.txt"
   intFile = FreeFile
   Open strFile For Input As intFile
   strBody = Input(LOF(intFile), intFile)
   'テキスト本文をループして必要なものを取り出す
   ''ここにいくつかのvbaのコード
   Debug.Print strBody
   Close intFile
End Sub

上記のコードでは、テキストファイル「test.txt」を開き、ファイルの内容をすべて変数strBodyに読み込んでいます。 strBody変数にファイルのデータを取り出したら、それを必要な用途に使用することができます。上記のDebug.Printコマンドを使用すると、VBEイミディエイトウィンドウでstrBody変数の中身を見ることができます。

テキストファイルを開いて追記する

VBAでテキストファイルを開き、Appendメソッドを使ってファイルの末尾に追記することもできます。

Sub AppendToTextFile()
Dim strFile As String
Dim strBody As String
Dim intFile As Integer

   strFile = "C:\data\test.txt"
   intFile = FreeFile
   Open strFile For Append As intFile
'下に2行を追加する
   Print #intFile, "これはテキストの最後尾に付け足した行です"
   Print #intFile, "もう一行付け足しました"
'ファイルを閉じる
   Close intFile
End Sub

上記のコードでは、テキストファイルを開いてから、変数#intFileを使ってファイルの下に2行のテキストを追加します(#記号がポイントです!)。 その後、ファイルを閉じます。

Wordファイルを開き、書き込む

ExcelのVBAを使って、Wordのファイルを開くこともできます。

Sub OpenWordFile()
   Dim wApp As Object
   Dim wDoc As Object
   Set wApp = CreateObject("Word.Application")
   Set wd = wApp.documents.Open("c:data\test.docx")
   wApp.Visible = True
End Sub

このコードは、Wordのコピーを開き、文書test.docxを開きます。

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples