VBA ワークブックを操作する(ワークブックオブジェクト)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 4月 26, 2022

このガイドでは 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

vba open close file ファイル 開く 閉じる

ワークブックを新規作成(追加)する

この行は、新しいワークブックを作成するコードです。

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をアクティブにします。

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