【Excel VBA】ファイルパスを指定して既存のブックを開き、操作する方法

VBAでマクロを組む上で、「別のExcelファイルを開いて、そこからデータを読み取りたい」または「処理結果を別のファイルに書き込みたい」といったブックをまたいだ操作は頻繁に発生します。

この記事では、VBAで指定したパスにある既存のExcelブックを開き、そのブックをオブジェクト変数に格納して安全・確実に操作するための、最も基本的で重要な手法を解説します。


目次

完成したVBAコード

以下が、マクロが保存されているExcelファイルと同じフォルダにある「DataSource.xlsx」というブックを開き、セルを編集して保存・クローズするまでの一連のVBAコードです。

Sub OpenAndEditWorkbook()

    ' 変数を宣言します
    Dim targetBookPath As String
    Dim openedBook As Workbook

    ' 開きたいブックのフルパスを指定します
    targetBookPath = ThisWorkbook.Path & "\DataSource.xlsx"
    
    ' --- 1. ファイルの存在を確認 ---
    If Dir(targetBookPath) = "" Then
        MsgBox "指定されたファイルが見つかりません。" & vbCrLf & targetBookPath, vbExclamation
        Exit Sub
    End If

    ' --- 2. ブックを開き、そのオブジェクトを変数に格納 ---
    ' Workbooks.Openが返した「開かれたブック」をopenedBook変数にセットします
    Set openedBook = Workbooks.Open(targetBookPath)
    
    ' --- 3. 開いたブックをオブジェクト変数経由で操作 ---
    With openedBook.Worksheets("Sheet1")
        .Range("A1").Value = "この値はVBAによって書き込まれました。"
        .Range("A1").Font.Bold = True
    End With
    
    ' --- 4. 開いたブックを保存して閉じる ---
    ' SaveChanges:=True で変更を保存して閉じます
    openedBook.Close SaveChanges:=True
    
    ' --- 5. オブジェクト変数を解放 ---
    Set openedBook = Nothing

    MsgBox "外部ブックの操作が完了しました。"

End Sub

コードのポイント解説

① ファイルの存在チェック (Dir関数)

If Dir(targetBookPath) = "" Then
    MsgBox "指定されたファイルが見つかりません。"
    Exit Sub
End If

Workbooks.Openを実行する前に、Dir関数を使って対象のファイルが実際にその場所に存在するかをチェックするのは、非常に良い習慣です。ファイルが存在しない場合にDir関数は空の文字列("")を返すため、これを利用してエラーを未然に防ぎ、ユーザーに分かりやすいメッセージを表示できます。

② ブックを開いて変数に格納 (Workbooks.Open)

Set openedBook = Workbooks.Open(targetBookPath)

これが、外部ブックを操作する際の最も重要なコードです。

  1. Workbooks.Open("ファイルパス")が実行され、指定されたブックが開かれます。
  2. このメソッドは、戻り値として**「開かれたブックのオブジェクト」**そのものを返します。
  3. Setキーワードを使い、その返されたオブジェクトをopenedBookという変数に代入(セット)します。

これ以降、openedBookという変数が、新しく開かれたブックを直接指し示す「名札」の役割を果たします。これにより、ActiveWorkbookのようにユーザーの操作によって対象がズレる危険性がなくなり、コードの信頼性が格段に向上します。

③ 開いたブックの操作とクローズ

With openedBook.Worksheets("Sheet1")
    ' ...
End With
openedBook.Close SaveChanges:=True

ブックの操作やクローズは、すべてopenedBook変数に対して行います。これにより、どのブックを操作しているかがコード上明確になります。.Closeメソッドの引数SaveChanges:=Trueは、ファイルを保存してから閉じる、という便利なオプションです。


Workbooks.Openの便利な引数

Workbooks.Openメソッドには、ほかにもよく使われる便利な引数があります。

  • ReadOnly:=True: ブックを読み取り専用で開きます。誤ってデータを書き換えるのを防ぎたい場合に利用します。
  • UpdateLinks:=0: 外部参照リンクが含まれるブックを開く際に、リンクを更新しないようにします。更新確認のメッセージを抑制し、ブックを素早く開くことができます。
  • Password:="シークレット": パスワードで保護されたブックを開く際に、パスワードをコード内で指定します。

まとめ

VBAで既存のブックを開いて操作する際の、最も安全で推奨される手順は以下の通りです。

  1. 操作したいブックのフルパスを準備する。
  2. (推奨) Dir関数で、ファイルが実際に存在するかをチェックする。
  3. Set wb = Workbooks.Open(filepath) の構文でブックを開き、オブジェクト変数に格納する。
  4. すべての操作をそのオブジェクト変数経由で行う。
  5. 最後に**.Close**でブックを閉じる。

この「オブジェクト変数で補足する」という考え方は、VBAで安定したマクロを構築するための基本であり、最重要テクニックの一つです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次