| 
    
     |  | ▼ぴょんきち さん: ▼UO3 さん:
 ちょっとおじゃまします。
 >
 >それに、今回のサブフォルダを見に行ってというところで、躓いております。
 
 別法ですが、サブフォルダを含む指定拡張子のファイルの取得は
 Dirコマンドを使うと再帰せずに一覧を得ることができます。
 
 各Bookの参照するシート名は 「Sheet1」のように固定されていることが
 リンク式埋め込み方式のポイントですね
 
 Sub Try1()
 ' ------- 検索フォルダの指定
 Dim objFolder As Object
 Const BIF_RETURNNONLYFSDIRS = &H1 'ディレクトリのみ選択可
 Const BIF_EDITBOX = &H10 'アイテム名入力用のEdit_boxを表示
 Dim hWnd As Long
 Dim sPath As String
 hWnd = Application.hWnd
 Set objFolder = _
 CreateObject("Shell.Application").BrowseForFolder( _
 hWnd, _
 "フォルダを選択して下さい", _
 BIF_RETURNNONLYFSDIRS Or BIF_EDITBOX)
 If (objFolder Is Nothing) Then Exit Sub
 
 sPath = objFolder.Self.Path & "\"
 
 ' ------- サブディレクトリを含む *.xlsファイルの検索
 Dim fList
 Dim i As Long
 Dim n As Long
 Dim tmpPath As String
 Dim sCmd As String
 Dim ko As Long
 
 tmpPath = Environ$("Temp") & "\Dir.tmp"
 sCmd = "DIR """ & sPath & "*.xls" & """ /b /s > """ & tmpPath & """"
 With CreateObject("WScript.Shell")
 ko = .Run("CMD /C " & sCmd, 7, True) 'Dirコマンド実行
 End With
 Dim io As Integer
 Dim buf() As Byte
 io = FreeFile()
 Open tmpPath For Binary As io
 ReDim buf(1 To LOF(io))
 Get #io, , buf
 Close io
 Kill tmpPath
 fList = Split(StrConv(buf, vbUnicode), vbCrLf) 'ファイルリストを得る
 
 ' ------- リンク式表の作成
 n = UBound(fList)
 Dim RefTable()
 ReDim RefTable(n, 1 To 3)
 RefTable(0, 1) = "ファイルパス"
 RefTable(0, 2) = "A1値"
 RefTable(0, 3) = "C1値"
 For i = 0 To n - 1
 RefTable(i + 1, 1) = fList(i)
 ko = InStrRev(fList(i), "\")
 sCmd = "='" & Left$(fList(i), ko) & _
 "[" & Mid$(fList(i), ko + 1) & "]Sheet1'!"
 RefTable(i + 1, 2) = sCmd & "A1"
 RefTable(i + 1, 3) = sCmd & "C1"
 Next
 ' ------- リンク式表を新規シートに貼り付ける
 Workbooks.Add(xlWBATWorksheet).Worksheets(1) _
 .Cells(1).Resize(n, 3).Value = RefTable
 End Sub
 
 |  |