vba ワークブックを開く/閉じる
このチュートリアルでは、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
この画像にあるように、この方法では、ユーザーはどのファイルを開くかを選択することができます。ファイルを開くダイアログボックスは、大幅にカスタマイズすることができます。特定のフォルダをデフォルトにしたり、表示するファイルの種類を選択したり(例:.xlsxのみ)、その他いろいろなことが可能です。「ファイルを開く」ダイアログボックスの詳細な例については、チュートリアルをお読みください。
新しいワークブックを開く
このコードは、新しいワークブックを開くためのものです。
Workbooks.Add
新しいワークブックを開く 変数へ
このプロシージャは、新しいワークブックを開き、変数wbに代入します。
Sub OpenNewWorkbook()
Dim wb As Workbook
Set wb = Workbooks.Add
End Sub
ワークブックを開く構文
Workbooks.Openを使用すると、ワークブックを開く際に多くのオプションが用意されていることに気付くかもしれません。
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を開きます。