【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を使っていると、ほかのブックを使いたいと思うときがきっとあるはずです。そんなときにブックの開き方やファイルの存在チェックを覚えておくと必ず役立ちます。ぜひマスターしましょう!