■ Workbook オブジェクトとは?
Workbook
オブジェクトは、Excel で開かれている 1 つのワークブック(Excel ファイル)を表します。たとえば、Book1.xlsx
や 売上表.xlsm
といったファイルは、それぞれ 1 つの Workbook オブジェクトとして VBA で操作できます。
VBA では、複数のワークブックを同時に開いて処理したり、特定のワークブックをアクティブにして処理を実行したりできます。
■ Workbook オブジェクトへのアクセス方法
Workbook オブジェクトには、主に以下の方法でアクセスします。
1. 現在アクティブなブックにアクセス
Dim wb As Workbook
Set wb = ActiveWorkbook
2. このマクロを含むブックにアクセス
Dim wb As Workbook
Set wb = ThisWorkbook
3. 開いているブックを名前で指定してアクセス
Dim wb As Workbook
Set wb = Workbooks("売上表.xlsx")
■ Workbook の主なプロパティ
● Name
ブックの名前を取得します(拡張子付き)。
MsgBox ActiveWorkbook.Name
● FullName
フルパスを含むブックの完全なファイル名。
MsgBox ThisWorkbook.FullName
● Path
保存先フォルダのパス。
MsgBox ThisWorkbook.Path
● Worksheets
ブック内のワークシートコレクション。
Dim ws As Worksheet
Set ws = Workbooks("Book1.xlsx").Worksheets("Sheet1")
● ReadOnly
読み取り専用で開かれているかどうかを示す。
If ActiveWorkbook.ReadOnly Then
MsgBox "このブックは読み取り専用です"
End If
■ Workbook の主なメソッド
● Save / SaveAs
ブックの保存を行います。
ActiveWorkbook.Save
ActiveWorkbook.SaveAs "C:\Users\User\Desktop\新しいファイル.xlsx"
● Close
ブックを閉じます。
ActiveWorkbook.Close SaveChanges:=True
● Activate
ブックをアクティブにします。
Workbooks("売上表.xlsx").Activate
● Protect / Unprotect
ブックに保護をかけたり解除したりします。
ActiveWorkbook.Protect Password:="1234"
ActiveWorkbook.Unprotect Password:="1234"
■ Workbook を開く・作成する
● 新しいブックを作成
Dim newBook As Workbook
Set newBook = Workbooks.Add
● 既存のブックを開く
Dim wb As Workbook
Set wb = Workbooks.Open("C:\ファイル\売上.xlsx")
■ Workbook に関するイベント(ThisWorkbook モジュール)
Workbook に関する処理を自動で実行したい場合、イベントを使うことができます。イベントは ThisWorkbook
モジュールに記述します。
● Openイベント(ブックが開かれたとき)
Private Sub Workbook_Open()
MsgBox "このブックを開きました"
End Sub
● BeforeCloseイベント(閉じる直前)
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If MsgBox("本当に閉じますか?", vbYesNo) = vbNo Then
Cancel = True
End If
End Sub
● SheetActivateイベント(シートがアクティブになったとき)
vbコピーする編集するPrivate Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox "アクティブにしたシート:" & Sh.Name
End Sub
■ Workbook を使った実用例
● 複数のワークブック間でデータをコピー
Sub CopyBetweenBooks()
Dim sourceBook As Workbook
Dim targetBook As Workbook
Dim sourceSheet As Worksheet
Dim targetSheet As Worksheet
Set sourceBook = Workbooks.Open("C:\データ\元データ.xlsx")
Set targetBook = ThisWorkbook
Set sourceSheet = sourceBook.Sheets("Sheet1")
Set targetSheet = targetBook.Sheets("Sheet1")
sourceSheet.Range("A1:D10").Copy targetSheet.Range("A1")
sourceBook.Close SaveChanges:=False
End Sub
このように、ワークブックを跨いだ操作も VBA で簡単に行うことができます。
■ よくある注意点
ActiveWorkbook
は「今操作している」ブックなので、対象を明確にしたい場合はThisWorkbook
や明示的な変数を使いましょう。- ワークブックを閉じる前に、保存有無の確認を行うようにしましょう。
- 開くファイルのフルパスが正しくないとエラーになるため、エラーハンドリングも必要です。
■ まとめ
項目 | 内容 |
---|---|
対象 | Excelファイル(ワークブック) |
主なアクセス方法 | ActiveWorkbook , ThisWorkbook , Workbooks("名前") |
代表的プロパティ | Name , FullName , Path , Worksheets |
代表的メソッド | Save , Close , Open , Protect |
イベント | Open , BeforeClose , SheetActivate など |
よくある活用例 | データ集計、帳票出力、ファイル自動保存など |