【Excel VBA入門】Workbookオブジェクトを使ったワークブックの基本操作

【Excel VBA入門】Workbookオブジェクトを使ったワークブックの基本操作

こんにちは、業務自動化ツール開発担当の吉池(@valmore_myoshi)です。

ワークブックと聞いて何を指しているかわかりますか?答えはそう、Excelファイルです!VBAを始めたばかりのころは何のことだろうと思ってましたが、今では当たり前のように使っています。

今回はワークブックを取り上げて、VBAでよく使う基本操作を解説していきます。

ワークブックとは

最初にも書きましたが、ワークブックはExcelファイルのこと。VBAでは、一つひとつのExcelファイルをWorkbookオブジェクトとして扱います。

また、Excelファイルは複数開くことができますが、個々のExcelファイルをまとめて管理しているのがWorkbooksオブジェクトです。

ワークブックの取得

WorkbooksオブジェクトがすべてのExcelファイルを管理しているので、特定のブックを取得したいときはWorkbooksオブジェクトにファイル名を指定します。戻り値が指定したWorkbookオブジェクトなので、そのまま変数に代入すれば続けてブックを操作できます。

Dim wb As Workbook

Set wb = Workbooks(取得したいExcelファイル名)

例えば、デスクトップのsample.xlsxファイルのA1セルの値を取得するには下記のように書きます。

Dim wb As Workbook
Dim value As String

Set wb = Workbooks("sample.xlsx")
value = wb.Worksheets(1).Range("A1").value

Debug.Print value

このときsample.xlsxは開いていることが前提です!開いていなければWorkbooksオブジェクトから認識できません。

そして、Excelファイル名のみを指定することにも要注意!Workbooksオブジェクトはファイル名のみ識別できるので、フルパスを書いてもエラーになります

アクティブなブックを取得する

ファイル名を指定するほかにも現在選択している(アクティブな)ブックを取得したければ、ActiveWorkbookを使う方法もあります。

下記の例では、新しく開いたブックを取得しようとしています。開いたブックがアクティブになるため、ブックをOpenした直後にActiveWorkbookを使えば、新しく開いたブックを取得できます。

Dim wb As Workbook
Dim value As String

Workbooks.Open "C:\Users\yoshiike\Desktop\sample.xlsx"
Set wb = ActiveWorkbook

value = wb.Worksheets(1).Range("A1").value

Debug.Print value

ワークブックを開く

ワークブックを開くにはWorkbooksオブジェクトのOpenメソッドに引数としてファイルパスを指定します。戻り値は指定したWorkbookオブジェクトです。

Workbooks.Open 開きたいExcelファイルパス

下記の例では、デスクトップのsample.xlsxを開いてセルA1の値を書き換え、最後にファイルを閉じています。

Dim wb As Workbook

Workbooks.Open "C:\Users\yoshiike\Desktop\sample.xlsx"
Set wb = ActiveWorkbook

wb.Worksheets(1).Range("A1").value = "This is test."

wb.Close SaveChanges:=True

開いたブックを閉じるときの注意点

ワークブックは使わなくなった時点で閉じることをオススメします。開いたままにしておくと予期せぬエラーになりかねません。

開いたブックに変更を加えた場合、閉じるときに注意が必要です。単純にWorkbookオブジェクトのCloseメソッドを使うと変更内容を保存するか確認するポップアップが表示され、VBAが止まってしまうからです。

閉じる前にSaveメソッドで保存するか、Closeメソッドの引数SaveChangesにTrueを指定することで「保存して閉じる」を選択できます。

Dim wb As Workbook

Set wb = Workbooks.Open("C:\Users\yoshiike\Desktop\sample.xlsx")
wb.Worksheets(1).Range("A1").value = "This is test."

' 閉じる前に保存
wb.Save

' あるいは引数SaveChangesにTrueを指定して「保存して閉じる」
wb.Close SaveChanges:=True

ワークブックが開かれているか確認

ファイルがなければ開くことはできません。存在しないファイルを開くエラーを防ぐためにもファイルの存在チェックをしましょう!

VBAではDir関数を使ってファイルの存在可否を確認できます。指定したパスがなければ空文字を返してくれるので、If文を使って処理を分けます。

Dim wb As Workbook
Dim path As String

path = "C:\Users\yoshiike\Desktop\sample.xlsx"

If Dir(path) <> "" Then
    Workbooks.Open path
Else
    MsgBox path & "が存在しません!"
    Exit Sub
End If

Set wb = ActiveWorkbook

ワークブックをコピーする

ワークブックをコピーするにはFileCopyステートメントかWorkbookオブジェクトのSaveCopyAsメソッドを使います。

FileCopyステートメントは引数にコピー元とコピー先パスをとります。すでに開いているファイルはコピーできないので、閉じたファイルが前提となります。

FileCopy(コピー元パス, コピー先パス)

一方、SaveCopyAsメソッドはコピーしたいWorkbookオブジェクトに続けてコピー先を指定します。FileCopyメソッドとは異なり、すでに開いていても問題なくコピーできます

Dim wb As Workbook

Set wb = Workbooks.Open("C:\Users\yoshiike\Desktop\sample.xlsx")
wb.Worksheets(1).Range("A1").value = "This is test."

wb.SaveCopyAs ("C:\Users\yoshiike\Desktop\sample1.xlsx")

wb.Close True

まとめ

ワークブックの基本操作を解説しました。VBAを使っていると、ほかのブックを使いたいと思うときがきっとあるはずです。そんなときにブックの開き方やファイルの存在チェックを覚えておくと必ず役立ちます。ぜひマスターしましょう!