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.