|
速いのは、すべておまかせの Findコマンドだとおもうので、
この例を紹介します。
結果はシートに吐き出しますので、対象シートをアクティブにして、
下の
> v = FindText("D:\(Data)", "*.txt", "あいう")
の部分を、
FindText(検索パス, 検索ファイル名(ワイルドカード可), 検索文字列)
のようにそちらの環境に合わせて修正して試してみてください。
Sub Findtest()
Dim v
Cells.ClearContents
v = FindText("D:\(Data)", "*.txt", "あいう")
v = Split(v, vbCrLf)
Cells(1).Resize(UBound(v) + 1).Value = Application.Transpose(v)
End Sub
'テキストファイル内の検索
Private Function FindText(LookIn$, Filename$, What$) As String
Dim tmpPath As String
Dim sCmd As String
Dim ko As Long
Dim ff() As String
If Right$(LookIn, 1) <> "\" Then LookIn = LookIn & "\"
LookIn = LookIn & Filename
tmpPath = Environ$("Temp") & "\Find.tmp" '作業用ファイル名
sCmd = "FIND /n """ & What & """ " & LookIn & " > " & tmpPath
'Debug.Print sCmd
With CreateObject("WScript.Shell")
ko = .Run("CMD /C " & sCmd, 7, True) 'Findコマンド実行
End With
If FileLen(tmpPath) < 1 Then '該当ファイルがなかったときの処理
FindText = Split("")
Exit Function
End If
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
FindText = StrConv(buf, vbUnicode)
End Function
ただ、この方式ですと、
> ---------- D:\(DATA)\CB-ABC.TXT
> "[1]あいうえお 1234.5 2004-9-14"
>
> ---------- D:\(DATA)\CONCATEABC.TXT
>
> ---------- D:\(DATA)\MIDあいう.TXT
> [1]あいう
>
> ---------- D:\(DATA)\TEMP1234.TXT
のように、見つからなかったファイル名も表示されています。
[1]は行番号です。
検索でヒットしたファイルだけ表示したいなら、出力ファイルを編集するか、
Dirで抽出した*.Txtファイルを順に開いて、自前で検索するとか、
方法を変えないといけないですね
|
|