Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7310 / 76735 ←次へ | 前へ→

【75013】Re:ファイル検索とリンク設定
発言  kanabun  - 13/11/14(木) 17:48 -

引用なし
パスワード
   ▼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
0 hits

【75011】ファイル検索とリンク設定 Kohaku 13/11/14(木) 13:28 質問
【75013】Re:ファイル検索とリンク設定 kanabun 13/11/14(木) 17:48 発言
【75024】Re:ファイル検索とリンク設定 Kohaku 13/11/15(金) 18:20 お礼
【75025】Re:ファイル検索とリンク設定 kanabun 13/11/15(金) 18:54 発言
【75043】Re:ファイル検索とリンク設定 Kohaku 13/11/18(月) 14:11 お礼
【75082】Re:ファイル検索とリンク設定 kohaku 13/12/9(月) 19:11 質問
【75088】Re:ファイル検索とリンク設定 kanabun 13/12/10(火) 13:12 発言
【75091】Re:ファイル検索とリンク設定 kohaku 13/12/10(火) 16:32 お礼

7310 / 76735 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free