← コード一覧へ戻る
実務ブック

ブックを開かないでデータを取得する

閉じたブックを参照する数式を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画面ではありません。

  1. 手動:参照元を用意

    別のxlsxのSheet1!A1に100を入れ、保存して閉じる

  2. 手動:xlsxを選ぶ

    マクロのファイル選択画面で参照元を選ぶ

  3. マクロ:外部参照式を設定

    練習!A1へ「選んだブックのSheet1!A1」を参照する数式を入れる

  4. 結果:保存済みの値を参照

    外部リンク更新が許可されていれば100を取得できる

選択キャンセルなら終了します。練習!A1を上書きします。外部リンクの更新がブロックされると自動取得できません。

コードの処理を説明する模式図です。実際の画面や実行結果を撮影したものではありません。

使い方・実行手順を確認する3つの手順で、コードの使い方を確認できます
  1. 1

    練習用のブックをExcelマクロ有効ブック(.xlsm)で保存します。別のxlsxに「Sheet1」を作りA1に100と入力して保存し、閉じます。マクロ側には「練習」シートを用意します。

  2. 2

    Alt+F11でVBEを開き、[挿入]→[標準モジュール]にコードを貼り付けます。

  3. 3

    Sample3041内にカーソルを置いてF5で実行します。閉じたブックを参照する数式をA1に設定して、保存済みの値を取得します。

使っている機能の公式ドキュメント(Microsoft Learn)