[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別ファイルのセルを返す』(May)
今「May.xls」というファイルを開いています。
「May.xls」のSheet1のA1に「test01」と入力すると隣のB1セルに、
別フォルダに保存されている「test01.xls」のSheet3のD5セル値が表示され、
また「test02」と入力すると「test02.xls」のSheet3のD5セル値を表示させたいです。
INDIRECT関数では「testXX.xls」が開いていないとエラーになってしまうので無理でした。
関数で他のやり方があるのか、またはマクロを組む場合参考となるページ等をご教示願えれば幸いです。
宜しくお願いします。
A1 = c:\test\ の様な実際のファイルパス B1 = test01 ブック名 C1 = sheet3 シート名
が夫々記入されている前提で =Pull("'"&A1&"\["&B1&".xls]"&C1&"'!A1")
標準モジュールへ
Function Pull(xref As String) As Variant Dim xlapp As Object, xlwb As Workbook Dim b As String, r As Range, C As Range, n As Long n = InStrRev(xref, "\") If n > 0 Then If Mid(xref, n, 2) = "\[" Then b = Left(xref, n) n = InStr(n + 2, xref, "]") - n - 2 If n > 0 Then b = b & Mid(xref, Len(b) + 2, n) Else n = InStrRev(Len(xref), xref, "!") If n > 0 Then b = Left(xref, n - 1) End If If Left(b, 1) = "'" Then b = Mid(b, 2) On Error Resume Next If n > 0 Then If Dir(b) = "" Then n = 0 Err.Clear On Error GoTo 0 End If If n <= 0 Then Pull = CVErr(xlErrRef) Exit Function End If Pull = Evaluate(xref) If IsArray(Pull) Then Exit Function If CStr(Pull) = CStr(CVErr(xlErrRef)) Then On Error GoTo CleanUp Set xlapp = CreateObject("Excel.Application") Set xlwb = xlapp.Workbooks.Add On Error Resume Next n = InStr(InStr(1, xref, "]") + 1, xref, "!") b = Mid(xref, 1, n) Set r = xlwb.Sheets(1).Range(Mid(xref, n + 1)) If r Is Nothing Then Pull = xlapp.ExecuteExcel4Macro(xref) Else For Each C In r C.Value = xlapp.ExecuteExcel4Macro(b & C.Address(1, 1, xlR1C1)) Next C Pull = r.Value End If CleanUp: If Not xlwb Is Nothing Then xlwb.Close 0 If Not xlapp Is Nothing Then xlapp.Quit Set xlapp = Nothing End If End Function (seiya)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.