ブックを開かないでデータを取得する
閉じたブックを参照する数式をA1に設定して、保存済みの値を取得します。
実行前に確認
- 練習!A1を上書きし、外部リンクを作ります。Windowsのローカルファイルを想定。更新がブロックされる環境では自動取得できません。信頼できるファイルだけを使います。
1サンプルコード
Sub Sample3041()
Dim p As Variant, f As String, folder As String, book As String
p = Application.GetOpenFilename("Excel Files (*.xlsx),*.xlsx")
If VarType(p) = vbBoolean Then Exit Sub
f = CStr(p)
folder = Left$(f, InStrRev(f, Application.PathSeparator))
book = Mid$(f, InStrRev(f, Application.PathSeparator) + 1)
ThisWorkbook.Worksheets("練習").Range("A1").Formula = "='" & Replace(folder & "[" & book & "]Sheet1", "'", "''") & "'!A1"
MsgBox "練習!A1に外部参照の数式を設定しました。"
End Sub図で見る操作の流れ
イメージ図コードの動きを表した概念図です。実際のExcel画面ではありません。
手動:参照元を用意
別のxlsxのSheet1!A1に100を入れ、保存して閉じる
手動:xlsxを選ぶ
マクロのファイル選択画面で参照元を選ぶ
マクロ:外部参照式を設定
練習!A1へ「選んだブックのSheet1!A1」を参照する数式を入れる
結果:保存済みの値を参照
外部リンク更新が許可されていれば100を取得できる
選択キャンセルなら終了します。練習!A1を上書きします。外部リンクの更新がブロックされると自動取得できません。
コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。
使い方・実行手順を確認する3つの手順で、コードの使い方を確認できます
- 1
練習用のブックをExcelマクロ有効ブック(.xlsm)で保存します。別のxlsxに「Sheet1」を作りA1に100と入力して保存し、閉じます。マクロ側には「練習」シートを用意します。
- 2
Alt+F11でVBEを開き、[挿入]→[標準モジュール]にコードを貼り付けます。
- 3
Sample3041内にカーソルを置いてF5で実行します。閉じたブックを参照する数式をA1に設定して、保存済みの値を取得します。