こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル関数>参照ファイル名をセルから呼び出す

別ファイル(ブック)のセルを表示させたいのですが、例えば
=[あいうえお.xls]かきくけこ!$A$5
とせずに、
ファイル名は A1セル の文字列を充てる、というようなことは出来ないでしょうか?

関数が分からない人でも、簡単に参照したいファイル名を変えられるようにしたいのです。

よろしくお願い致します。

投稿日時 - 2008-02-01 16:53:12

QNo.3734385

困ってます

質問者が選んだベストアンサー

A1に「あいうえお.xls」があるとき
 =INDIRECT("[" & A1 & "]かきくけこ!$A$5")
でよいでしょう。
ただし「あいうえお.xls」が開いている必要があります。(#REF!エラーになるため)

A1に入力されたブック名が開いていないなら、ブックを開くようにするのであればマクロが必要です。ブック名を入力しているのがSheet1だとしたら以下のマクロをALT+F11でVBE画面を開き、左上のVBA Projectでシート名を右クリックし「挿入」→「標準モジュール」で表示される画面に貼り付けて保存して下さい。
するとINDIRECT関数を入力したブックを開くときに、A1セルのブックも開くようになります。ただし下から3行目のファイルパスは修正が必要です。

Sub Auto_open()
Dim wb, mybk As Workbook
Set mybk = ThisWorkbook
For Each wb In Workbooks
  If wb.Name = Sheets("Sheet1").Range("A1").Value Then
    Exit Sub
  End If
Next wb
Workbooks.Open "C:\Temp\" & Sheets("Sheet1").Range("A1").Value
mybk.Activate
End Sub

投稿日時 - 2008-02-01 17:29:13

お礼

「ブック名が開いていないなら」と、「先」の回答までいただきありがとうございます。
助かりました。

投稿日時 - 2008-02-01 20:41:48

ANo.2

このQ&Aは役に立ちましたか?

25人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんにちは。
下記のコードはA1のセルが変更されたらA1のファイル名でC:\tmpの中にそのファイルが存在したら、そのブックのA1の値を参照します。
参考にしてそちらの仕様に変更してください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MD As String, MF As String
If Target.Address = "$A$1" Then
MD = "c:\tmp\"
MF = Range("A1").Value & ".xls"
If Dir(MD & MF) <> "" Then
F = "'" & MD & "[" & MF & "]Sheet1'!R1C1"
Range("A5").Value = Application.ExecuteExcel4Macro(F)
Else
MsgBox "セルA1のファイルが存在しません "
End If
End If
End Sub

投稿日時 - 2008-02-01 17:50:51

お礼

ご教授ありがとうございます。

投稿日時 - 2008-02-01 20:46:42

ANo.1

A1="[あいうえお.xls]"
B1=INDIRECT(A1&"かきくけこ!$A$5")

投稿日時 - 2008-02-01 17:27:29

お礼

早速ありがとうございます。

投稿日時 - 2008-02-01 20:44:43

あなたにオススメの質問