| 
    
     |  | ▼Kohaku さん: 
 >例えば、 1行目の 番号 100に '.pdf' をつけて 100.pdf として
 >ネットワーク越しのフォルダ内を検索し、存在した時にそのフルパス名の
 >リンクを名前欄の右セルにセットしたい
 
 一例ですが、
 サブフォルダを含むファイルの検索は Dirコマンド というのを使うと
 比較的簡単に、けっこう速く、取得できると思います。
 今回は すべて*.pdf という拡張子なので、Dirコマンドですべての*.pdf
 ファイルを取得します。
 
 取得した{ファイル名; パス名} の組は Dictionary に登録しておくと、
 シートのファイル名が辞書のキーにあれば、対応するパス名が辞書から
 取得できます。
 
 '事前に Microsoft Scripting Runtimeへの参照設定が必要です
 Sub Try1()
 Dim dic As Dictionary
 'Const NETPath = "\\EPSON1120\Data (D)\(Data)\*.pdf"
 Const NETPath = "\\B450\(Pub)\*.pdf" '◆適宜変更
 
 Dim tmpFile As String
 Dim strCmd As String
 Dim buf() As Byte
 Dim fList() As String, f As String, s As String
 Dim i As Long, j As Long, n As Long
 
 'Dirコマンドの結果を出力する一時ファイル
 tmpFile = Environ$("TEMP") & "\Dir.tmp"
 
 'Dirコマンド用の文字列を編集
 strCmd = "Dir """ & NETPath & """ /b/s > """ & tmpFile & """"
 
 'WSHでDirコマンドを実行
 With CreateObject("Wscript.Shell")
 .Run "cmd /c" & strCmd, 7, True
 End With
 
 '該当ファイルの存在チェック
 If FileLen(tmpFile) < 1 Then
 MsgBox "該当するファイルがありません"
 Exit Sub
 End If
 
 'Dirコマンドの結果を出力した一時ファイルを読み込み
 Open tmpFile For Binary As #1
 ReDim buf(1 To LOF(1))
 Get #1, , buf
 Close #1
 Kill tmpFile '読んだら一時アイルは削除
 
 '取得したパス名をリスト用配列に入れます
 fList() = Split(StrConv(buf, vbUnicode), vbCrLf)
 n = UBound(fList)
 '{ファイル名とパス名}を辞書に登録します
 Set dic = New Dictionary
 dic.CompareMode = TextCompare
 For i = 0 To n - 1
 s = fList(i)     'パス名
 j = InStrRev(s, "\")
 f = Mid$(s, j + 1)  '正味ファイル名
 dic(f) = s
 'Debug.Print f, s
 Next
 
 'シートのA列のファイル名が辞書にあればそのパス名を取得します
 Dim r As Range
 Dim v As Variant
 Set r = Range("A2", Cells(Rows.Count, 1).End(xlUp))
 v = r.Value
 For i = 1 To UBound(v)
 If dic.Exists(v(i, 1)) Then
 v(i, 1) = dic(v(i, 1)) 'そのファイルのあるパス名
 Else
 v(i, 1) = ""
 End If
 Next
 'シートのB列に検索結果を貼り付ける
 r.Offset(, 1).Value = v
 End Sub
 
 
 |  |