[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別ファイル名をsheet上で指定してそのファイルを閉じた状態でデータを抽出したい』(るっちん)
初歩的なことかもしれませんが質問をさせて下さい。 例えばCドライブ上にある別のエクセルファイルがいくつかあり、 そのファイルの名前が500、550、700…といった形で保存されているとします。
この状態でA列にそのファイル名と同じ数字を入力すると、 B列にそのファイル名のあるセルの数値が表示されるようにしたいのですが どうすれば良いでしょうか?
とりあえずこんな式を入れてみましたがダメでした。 ='["&A1&".xls]'sheet1!$C$25 ファイルは閉じたままで出力をしたいです。
よろしくお願い致します。
閉じたファイルのデータはIndirect関数等のエクセル関数では取得できません。
とりあえずUPしておきます。 下記コードはHarlan Grove氏が書かれたものです。
1) Alt + F11 でVBEを起動 2) [挿入] - [標準モジュール] 右空白部分に下記コードを貼り付けてVBEを閉じる。 3) 使用例
A1が ["&A1&".xls]'sheet1!$C$25 であれば =pull("'c:\test\"&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 'needed by .ExecuteExcel4Macro
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)
=pull("'c:\test\["&A1&"]sheet1'!$C$25) としたら上手くいきました. (この場合,sample.xlsのsheet1のセルC25の値を参照します.)
hyouga
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.