VBAで別のExcelファイル(ブック)を参照する方法には、大きく分けて以下の2通りがあります:

✅ 1. 別ブックを開いて参照する方法(Workbooks.Open)
📌 基本構文
Dim wb As Workbook
Set wb = Workbooks.Open("C:\パス\ファイル名.xlsx")
🧾 使用例:別ブックのセルを参照して読み取る
Sub 別ブックを開いて参照()
Dim wb As Workbook
Set wb = Workbooks.Open("C:\Users\yourname\Documents\data.xlsx")
' A1セルの値を取得して表示
MsgBox wb.Sheets("Sheet1").Range("A1").Value
' 処理が終わったら閉じる(保存しない)
wb.Close SaveChanges:=False
End Sub
✅ 2. すでに開いているブックを参照する方法(Workbooks("名前"))
Sub 開いているブックを参照()
Dim wb As Workbook
Set wb = Workbooks("data.xlsx") ' 拡張子まで必要
MsgBox wb.Sheets("Sheet1").Range("A1").Value
End Sub
✅ 3. 値をコピーして自ブックに貼り付ける例
Sub 他のブックから値をコピー()
Dim srcWb As Workbook
Dim tgtWb As Workbook
Set tgtWb = ThisWorkbook
Set srcWb = Workbooks.Open("C:\Users\yourname\Documents\data.xlsx")
' Sheet1 の A1:B10 を Sheet2 の A1 に貼り付け
srcWb.Sheets("Sheet1").Range("A1:B10").Copy
tgtWb.Sheets("Sheet2").Range("A1").PasteSpecial xlPasteValues
srcWb.Close SaveChanges:=False
End Sub
✅ 4. ブックを開かずに値を取得(リンクではなく直接値取得)
これはVBA単体ではできませんが、ADO(ActiveX Data Objects)を使えば可能です。必要ならそのコードも提供します。
✅ よくある注意点
問題 | 対策 |
---|---|
ブックが存在しない | Dir 関数で事前に存在チェック |
シート名が違う/ない | If SheetExists(wb, "Sheet1") Then などで確認 |
値をコピーしたら数式が壊れる | .PasteSpecial xlPasteValues を使う |
保存せずに閉じたい | wb.Close SaveChanges:=False |
✅ ファイル存在チェックの例
If Dir("C:\Users\yourname\Documents\data.xlsx") = "" Then
MsgBox "ファイルが存在しません"
Exit Sub
End If