Amit ha una cartella che contiene centinaia di cartelle di lavoro di Excel. Deve cercare in tutte le cartelle di lavoro un testo specifico e si chiede se esiste un modo per cercare in tutte le cartelle di lavoro e determinare i nomi delle cartelle di lavoro che contengono il testo desiderato, insieme alle celle nelle cartelle di lavoro che contengono quel testo.

Trovare quali cartelle di lavoro contengono il testo desiderato è relativamente facile. Tutto quello che devi fare è utilizzare le funzionalità di ricerca di Windows per cercare i file, nella singola cartella, che contengono il testo desiderato. Anche se non ti dirà le posizioni delle celle, passerà in rassegna l’elenco dei file.

Ovviamente puoi usare una macro per fare la tua ricerca. (È sempre una buona idea utilizzare una macro per eseguire il lavoro lungo e noioso che altrimenti verrebbe eseguito manualmente.) Di seguito verranno visualizzate tutte le cartelle di lavoro in una cartella e la ricerca di ciò che si desidera individuare. Aprirà qualsiasi file che termina con xls * (l’asterisco finale significa che cercherà file xls, xlsx e xlsm).

Sub SearchFolders()

Dim fso As Object     Dim fld As Object     Dim strSearch As String     Dim strPath As String     Dim strFile As String     Dim wOut As Worksheet     Dim wbk As Workbook     Dim wks As Worksheet     Dim lRow As Long     Dim rFound As Range     Dim strFirstAddress As String

On Error GoTo ErrHandler     Application.ScreenUpdating = False

'Change as desired     strPath = "c:\MyFolder"

strSearch = "Specific text"



Set wOut = Worksheets.Add     lRow = 1     With wOut         .Cells(lRow, 1) = "Workbook"

.Cells(lRow, 2) = "Worksheet"

.Cells(lRow, 3) = "Cell"

.Cells(lRow, 4) = "Text in Cell"

Set fso = CreateObject("Scripting.FileSystemObject")

Set fld = fso.GetFolder(strPath)



strFile = Dir(strPath & "\.xls")

Do While strFile <> ""

Set wbk = Workbooks.Open _               (Filename:=strPath & "\" & strFile, _               UpdateLinks:=0, _               ReadOnly:=True, _               AddToMRU:=False)



For Each wks In wbk.Worksheets                 Set rFound = wks.UsedRange.Find(strSearch)

If Not rFound Is Nothing Then                     strFirstAddress = rFound.Address                 End If                 Do                     If rFound Is Nothing Then                         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                     Set rFound = wks.Cells.FindNext(After:=rFound)

Loop While strFirstAddress <> rFound.Address             Next

wbk.Close (False)

strFile = Dir         Loop         .Columns("A:D").EntireColumn.AutoFit     End With     MsgBox "Done"



ExitHandler:

Set wOut = Nothing     Set wks = Nothing     Set wbk = Nothing     Set fld = Nothing     Set fso = Nothing     Application.ScreenUpdating = True     Exit Sub

ErrHandler:

MsgBox Err.Description, vbExclamation     Resume ExitHandler End Sub

Per personalizzare la routine in base alle proprie esigenze, modificare la variabile strPath per riflettere il percorso della cartella che si desidera elaborare e modificare strSearch per riflettere il testo che si sta cercando. La macro crea un nuovo foglio di lavoro e inserisce “hit” in ogni riga. La colonna A contiene il nome della cartella di lavoro, la colonna B il nome del foglio di lavoro, la colonna C l’indirizzo della cella e la colonna D il contenuto di quella cella.

Ovviamente, qualsiasi macro come questa richiede un po ‘di tempo per essere eseguita. È possibile abbreviare leggermente il tempo riducendo il numero di file da cercare. Il modo migliore per farlo è utilizzare l’approccio di Windows Search (descritto all’inizio di questo suggerimento) per identificare le cartelle di lavoro in cui risiede il testo desiderato. Sposta quelle cartelle di lavoro nella loro cartella e quindi esegui la ricerca macro su quella cartella.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (5598) si applica a Microsoft Excel 97, 2000, 2002 e 2003.