ワークブックを開く

にメンテナンス済み

VBA を使ってデータを自動的に処理するにあたって、既存のワークブックからデータを読み込りたい場面があります。

VBA では他のワークブックを開く方法が用意されているため、VBA からワークブックを開き、データを取得・操作することが可能です。

これにより、複数のワークブック間でデータを自動的にやり取りすることができます。また、連番を含む複数のワークブックを一括で処理することも可能です。

このページでは、VBA を使ってワークブックを開く方法を具体的なコード例を交えて紹介します。

VBA を使ってワークブックを開く方法

新しくワークブックを開く場合、Workbooksクラスに用意されているOpenメソッドを使います。

ワークブックを開く
Workbooks.Open "対象のファイルパス"

このメソッドは、引数に指定したファイルパスのワークブックを開きます。

ファイルパスにはC:\Users\user\Documents\sample.xlsxのような絶対パスを指定します。

相対パスでワークブックを開く

もし相対パスを指定したい場合は、ThisWorkbook.Pathプロパティを使って、現在のワークブックのパスを取得し、それに対して相対パスを指定します。

相対パスでワークブックを開く
Workbooks.Open ThisWorkbook.Path & "\sample.xlsx"

上記のコードを実行すると、実行している Excel ファイルと同じディレクトリにあるsample.xlsxを開くことができます。

パスワード付きのワークブックを開く

パスワード付きのワークブックを開く場合は、Password引数にパスワードを指定します。

パスワード付きのワークブックを開く
Workbooks.Open("対象のファイルパス", Password:="パスワード")

上記のコードを実行すると、指定したパスワードで保護されたワークブックを開くことができます。

パスワードが間違っている場合は、エラーが出力されます。

読み取り専用でワークブックを開く

外部のエクセルファイルを変更する必要がなく、参照だけしたい場合は、読み取り専用でワークブックを開くことができます。

読み取り専用でワークブックを開く場合は、ReadOnly引数にTrueを指定します。

読み取り専用でワークブックを開く
Workbooks.Open("対象のファイルパス", ReadOnly:=True)

上記のコードを実行すると、読み取り専用でワークブックを開くことができます。

誤って編集してしまうことを防ぐために、参照のみの場合は読み取り専用でワークブックを開くことをおすすめします。

読み取り専用でワークブックを開く方法については、以下のページで詳しく解説しています。

ワークブックを読み取り専用で開く
VBAを使って、ワークブックを読み取り専用で開く方法を紹介します。

ワークブックを開く際の注意点

前述したコードを使ってワークブックを開くと、実際に新しいウィンドウで Excel が立ち上がります。

そのため、もし VBA コード中でエラーが発生し、処理が中断された場合、Excel が立ち上がったままになる可能性があります。

こういった状況を防ぐために、エラーが発生しても必ずワークブックは閉じる処理を追加することをおすすめします。

エラー発生時の対処方法については、以下のページで詳しく解説しています。

VBAにおけるTry-Catch-Finallyの実装
一般的にエラー処理は、各関数では最低限行い、後は呼び出し元にThrowするのが一般的かと思いますが、VBAではそれを簡単には実装できません。エラーハンドラを作ってしまうとエラーを握りつぶしてしまい、そこから再度Err.Raiseしようとする

ワークブックを閉じる具体例

基本的な使い方

以下のコードは、sample.xlsxを開いて、処理が終わったら閉じる例です。

ワークブックを開いて閉じる
Private Sub OpenWorkbook()
    Dim wb As Workbook
    Dim path As String

    ' 開きたいワークブックのパスを指定
    path = "C:\Documents\Report.xlsx"

    ' ワークブックを開く
    Set wb = Workbooks.Open(path)

    ' 何かの処理を行う
    ' ...

    ' 処理後、ワークブックを閉じる(変更を保存しない)
    wb.Close SaveChanges:=False
End Sub

複数のワークブックを一括で処理する

以下のコードは、配列で指定した複数のワークブックに対して、1 ファイルずつ処理を行い、処理が終わったら閉じる例です。

複数のワークブックを一括で処理する
Sub OpenMultipleWorkbooks()
    Dim wb As Workbook
    Dim files As Variant
    Dim i As Integer

    ' 開きたいワークブックのリスト
    files = Array("C:\Reports\Report1.xlsx", "C:\Reports\Report2.xlsx", "C:\Reports\Report3.xlsx")

    ' 配列内の各ファイルを開く
    For i = LBound(files) To UBound(files)
        Set wb = Workbooks.Open(files(i))
        ' 必要な処理を行う
        ' ...
        ' 処理後、ワークブックを閉じる(変更を保存せず)
        wb.Close SaveChanges:=False
    Next i
End Sub

まとめ

VBA を使用してワークブックを開く方法は、VBA の活用の幅を広げ、作業の自動化に非常に役立ちます。 コードをカスタマイズして、自分の作業に合わせて使ってみてください。

#vba #Excelの操作 #workbook #open