VBA ワークブックを操作する(ワークブックオブジェクト)
In this Article
このガイドでは、 VBAでWorkbookオブジェクトを使用する方法を紹介します。
ワークブックオブジェクト
まず、VBAでワークブックを操作するために、ワークブックオブジェクトを理解する必要があります。 ワークブックオブジェクトを使用すると、次のように名前でワークブックを参照することができます。
Workbooks("Book2.xlsm").Activate
しかし、このコードは、ワークブックが開いている場合にのみ動作します。ワークブックが閉じている場合は、ワークブックの完全なパスを指定する必要があります。
Workbooks.Open ("C:\Users\StevePC2\Downloads\book2.xlsm")
完全なパスを入力する代わりに、目的のワークブックが、コードが格納されているワークブックと同じディレクトリにある場合、このコードを使ってワークブックを開くこともできます。
Workbooks.Open (ThisWorkbook.Path & "\book2.xlsm")
これは、次のセクションで説明するThisWorkbookオブジェクトを利用しています。
ワークブックのインデックス番号
最後に、ワークブックを「インデックス番号」で参照する方法です。ワークブックのインデックス番号は、ワークブックが開かれた順番に対応します(厳密にはWorkbooksコレクションにおけるワークブックの位置です)。
Workbooks(1).Activate
これは、最初に(または最後に)開かれたワークブックを閉じたい場合などに便利です。
Workbook、ActiveWorkbook、およびThisWorkbookをアクティブにする
ワークブックがACTIVEでない場合、次のようにワークブックのオブジェクトにアクセスすることができます。
Workbooks("Book2.xlsm").Sheets("Sheet1").Range("A1").value = 1
ただし、ワークブックがActiveの場合は、ワークブックオブジェクトを省略することができます。
Sheets("Sheet1").Range("A1").value = 1
また、ワークブックのアクティブなシートを対話的に使用する場合には、sheetsオブジェクトを省略することもできます。
Range("A1").value = 1
ワークブックをアクティブにする
ワークブックをアクティブにするには、Activateメソッドを使用します。
Workbooks("Book2.xlsm").Activate
これで、ワークブック名を明示しなくても、Book2のオブジェクトを操作できるようになりました。
ActiveWorkbook
ActiveWorkbookオブジェクトは、常にアクティブなワークブックを参照します。これは、アクティブワークブックを変数に代入して後で使用したい場合に便利です。
Dim wb As Workbook
Set wb = ActiveWorkbook
ThisWorkbook
ThisWorkbookオブジェクトは、常に実行中のコードが格納されているワークブックを参照しています。ThisWorkbookをアクティブにするには、次のコード行を使用します。
ThisWorkbook.Activate
ワークブックを開く
ワークブックを開くには、Open メソッドを使用します。
Workbooks.Open ("C:\Users\StevePC2\Downloads\book2.xlsm")
新しく開いたワークブックは常にActiveWorkbookとなり、簡単に操作できるようになります。
ActiveWorkbook.Save
Openメソッドには他にもいくつかの引数があり、読み取り専用で開いたり、パスワードで保護されたワークブックを開いたりすることができます。ワークブックを開く/閉じるについてはこちらの記事で紹介しています。
開いたワークブックを変数に代入
ワークブックを開くと同時に、変数に代入することもできます。
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\StevePC2\Downloads\Book2.xlsm")
ファイルを開くダイアログ
このように「ファイルを開く」ダイアログボックスを起動することもできます。
Sub OpenWorkbook ()
Dim strFile As String
strFile = Application.GetOpenFilename()
Workbooks.Open (strFile)
End Sub
ワークブックを新規作成(追加)する
この行は、新しいワークブックを作成するコードです。
Workbooks.Add
新しいワークブックがActiveWorkbookになり、それを操作できるようになります。(例:新しいワークブックを保存する)
新しいワークブックを変数に追加する
また、新しいワークブックを変数に直接追加することもできます。
Dim wb As Workbook
Set wb = Workbooks.Add
ワークブックを閉じる
保存して閉じる
保存しながらワークブックを閉じるには、以下のようにSaveChangesをTRUEに設定した状態で Closeメソッドを使います。
ActiveWorkbook.Close SaveChanges:=True
保存せずに閉じる
保存せずに閉じるには、SaveChangesをFALSEに設定します。
ActiveWorkbook.Close SaveChanges:=False
ワークブックの名前を付けて保存
SaveAsメソッドは、ワークブックを次のように保存するために使用されます。 同じディレクトリに新しい名前でワークブックを保存するには、暗にこれを使用することができます。
ActiveWorkbook.SaveAs "new"
ここで、”new “は新しいファイル名です。 新しいディレクトリに特定のファイル拡張子で保存するには、新しいディレクトリとファイル名を指定するだけです。
ActiveWorkbook.SaveAs "C:\Users\StevePC2\Downloads\new.xlsm"
その他のワークブックのVBAの例
ワークブック名
次のコードはワークブック名を取得します。
MsgBox ActiveWorkbook.Name
ワークブックを保護する
ワークブックの構造を保護するには Protectメソッドを使います。(パスワードは任意)
Workbooks("book1.xlsm").Protect "password"
ワークブックの保護を解除するには、UnProtect メソッドを使用します。
Workbooks("book1.xlsm").Unprotect "password"
開いているすべてのワークブックをループ処理
開いているすべてのワークブックをループして処理するには、次のようにします。
Sub LoopThroughWBs()
Dim wb As Workbook
For Each wb In Workbooks
MsgBox wb.Name
Next wb
End Sub
Workbook Activateイベント
Workbook Openイベントで、ワークブックが開かれるたびに、いくつかのコードを実行することができます。 このプロシージャは、ThisWorkbookモジュールに配置します。
Private Sub Workbook_Open()
Sheets("Sheet1").Activate
End Sub
このプロシージャは、ワークブックが開かれるたびにSheet1をアクティブにします。