Ricerca in molte cartelle di lavoro (Microsoft Excel)
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.