Búsqueda en muchos libros de trabajo (Microsoft Excel)
Amit tiene una carpeta que contiene cientos de libros de Excel. Necesita buscar en todos los libros de trabajo algún texto específico y se pregunta si hay una manera de buscar en todos los libros de trabajo y determinar los nombres de los libros de trabajo que contienen el texto deseado, junto con las celdas de los libros de trabajo que contienen ese texto.
Encontrar qué libros contienen el texto deseado es relativamente fácil. Todo lo que necesita hacer es usar las capacidades de búsqueda de Windows para buscar archivos, en una sola carpeta, que contengan el texto deseado. Si bien no le dirá las ubicaciones de las celdas, analizará la lista de archivos.
Por supuesto, puede utilizar una macro para realizar su búsqueda. (Siempre es una buena idea usar una macro para hacer el trabajo largo y tedioso que de otro modo se haría manualmente). A continuación, se recorrerán todos los libros de trabajo en una carpeta y se buscará lo que desea localizar. Abrirá cualquier archivo que termine en xls * (el asterisco al final significa que buscará archivos xls, xlsx y 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
Para personalizar la rutina según sus necesidades, cambie la variable strPath para reflejar la ruta a la carpeta que desea procesar y cambie strSearch para reflejar el texto que está buscando. La macro crea una nueva hoja de trabajo y coloca «hits» en cada fila. La columna A contiene el nombre del libro de trabajo, la columna B el nombre de la hoja de trabajo, la columna C la dirección de la celda y la columna D el contenido de esa celda.
Obviamente, cualquier macro como esta tarda bastante en ejecutarse. Puede acortar un poco el tiempo reduciendo la cantidad de archivos que necesita buscar. La mejor manera de hacer esto es utilizar el enfoque de búsqueda de Windows (descrito al principio de este consejo) para identificar los libros de trabajo en los que reside el texto deseado. Mueva esos libros de trabajo a su propia carpeta y luego realice la búsqueda de macros en esa carpeta.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (5598) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.