Søke gjennom mange arbeidsbøker

January 17  by Eliza

Amit har en mappe som inneholder hundrevis av Excel-arbeidsbøker. Han trenger å søke gjennom alle arbeidsbøker for noen bestemt tekst og lurer på om det er en måte å søke gjennom alle arbeidsbøker og bestemme navnene på arbeidsbøker med ønsket tekst, sammen med cellene i arbeidsbøker som inneholder denne teksten.

Funn som arbeidsbøker inneholder ønsket tekst er relativt enkelt. Alt du trenger å gjøre er å bruke søkefunksjonene i Windows for å søke etter filer, i én mappe, som inneholder ønsket tekst. Selv om det ikke vil fortelle deg celle steder, vil det renske ned på listen over filer.

Selvfølgelig kan du bruke en makro for å gjøre din søker for deg. (Det er alltid en god idé å bruke en makro for å gjøre lang, kjedelig arbeid som ellers ville bli gjort manuelt.) Følgende vil gå gjennom alle arbeidsbøkene i en mappe og søke etter det du ønsker å finne. Det vil åpne en fil som slutter på xls * (den etterfølgende stjerne betyr at det vil søke etter xls, xlsx, og XLSM filer).

Sub SearchFolders ()
Dim FSO Som Object
Dim Fld Som Object
Dim strSearch As String
Dim strPath As String
Dim strFile As String
Dim Wout Som regneark
Dim WBK Som arbeidsbok
Dim wks Som regneark
Dim lRow Som Long
Dim rFound Som Range
Dim strFirstAddress As String

On Error GoTo ErrHandler
Application.ScreenUpdating = False

'Endre som ønsket
strPath = "c: \ MyFolder"
strSearch = "Spesifikk tekst"

Satt Wout = Worksheets.Add
lRow = 1
Med Wout
.Cells (LRow, 1) = "arbeidsbok"
.Cells (LRow, 2) = "Regneark"
.Cells (LRow, 3) = "Cell"
.Cells (LRow, 4) = "Tekst i Cell"
Satt FSO = Create ("Scripting.FileSystemObject")
Set Fld = fso.GetFolder (strPath)

strFile = Dir (strPath & "\ *. xls *")
Gjør Mens strFile <> ""
Satt WBK = Workbooks.Open _
(Filename: = strPath & "\" & strFile, _
UpdateLinks: = 0, _
Skrivebeskyttet: = sant, _
AddToMRU: = False)

For hver wks I wbk.Worksheets
Satt rFound = wks.UsedRange.Find (strSearch)
Hvis ikke rFound Er Ingenting Deretter
strFirstAddress = rFound.Address
End If
Gjøre
Hvis rFound Er Ingenting Deretter
Exit Do
Else
lRow = lRow + 1
.Cells (LRow, 1) = wbk.Name
.Cells (LRow, 2) = wks.Name
.Cells (LRow, 3) = rFound.Address
.Cells (LRow, 4) = rFound.Value
End If
Satt rFound = wks.Cells.FindNext (Etter: = rFound)
Loop Mens strFirstAddress <> rFound.Address
Neste

wbk.Close (usann)
strFile = Dir
Loop
.Columns ("A: D") EntireColumn.AutoFit.
Avslutt med
MsgBox "Ferdig"

ExitHandler:
Satt Wout = Nothing
Satt wks = Nothing
Satt WBK = Nothing
Set Fld = Nothing
Set FSO = Nothing
Application.ScreenUpdating = True
Exit Sub

ErrHandler:
MsgBox Err.Description, vbExclamation
Gjenoppta ExitHandler
End Sub

Å tilpasse rutine for dine behov, endre strPath variabel å reflektere banen til mappen du ønsker å behandle og endre strSearch å reflektere teksten som du søker. Makroen oppretter et nytt regneark og plasserer "treff" i hver rad. Kolonne A inneholder navnet arbeidsbok, kolonne B regnearknavnet, kolonne C celleadressen, og kolonne D innholdet i den cellen.

Selvsagt, noe makro som dette tar ganske mye tid å kjøre. Du kan korte ned tiden noe ved å redusere antall filer den trenger for å søke. Den beste måten å gjøre dette på er å bruke Windows Search tilnærming (beskrevet i begynnelsen av dette tipset) for å identifisere arbeidsbøker hvor den ønskede teksten bor. Flytte disse arbeidsbøker til sin egen mappe og deretter gjøre makro søk på den mappen.

ExcelTips er din kilde for kostnadseffektiv Microsoft Excel trening. Dette tipset (5598) gjelder for Microsoft Excel 97, 2000, 2002, og 2003.