Kelly tiene un libro de trabajo que contiene cientos de hojas de trabajo. Cada hoja de trabajo representa un proyecto individual para su empresa. La celda C4 de cada hoja de trabajo contiene el número de proyecto para ese proyecto en particular.

Encontrar proyectos individuales entre los cientos del libro de trabajo es, en el mejor de los casos, engorroso. Se pregunta si se podría crear una macro para que todos los usuarios ingresen un número de trabajo, busquen la hoja de trabajo que tenga ese número de trabajo en la celda C4 y luego muestren esa hoja de trabajo.

Antes de abordar cómo hacer esto en una macro, debe comprender que es posible que pueda encontrar el proyecto deseado utilizando las herramientas nativas de Excel.

Todo lo que necesitas hacer es seguir estos pasos:

  1. Presione Ctrl + F. Excel muestra la pestaña Buscar del cuadro de diálogo Buscar y reemplazar.

  2. Haga clic en el botón Opciones para expandir el cuadro de diálogo. (Ver figura 1)

  3. Usando la lista desplegable Dentro, elija Libro de trabajo.

  4. Si la celda C4 de cada hoja de trabajo contiene solo el número de proyecto, seleccione la casilla de verificación Coincidir con todo el contenido de la celda.

  5. Haga clic en Buscar siguiente.

Eso es; debe ser llevado a la primera instancia de celda que contiene su número de proyecto. Si su libro de trabajo contiene números de proyecto en varias celdas (además de la celda C4), entonces usar la herramienta Buscar puede ser un poco tedioso; deberá seguir haciendo clic en Buscar siguiente hasta que encuentre la hoja de trabajo correcta. En tal situación, una macro puede ser la mejor solución porque le permite mirar específicamente a la celda C4 e ignorar lo que esté en cualquier otra celda.

La siguiente macro solicita al usuario que ingrese un número de proyecto. Luego busca en cada hoja de trabajo en el libro de trabajo la primera hoja de trabajo en la que la celda C4 contiene ese número de proyecto. Si se encuentra, la macro muestra la hoja de trabajo y activa la celda. Si no se encuentra, se muestra un mensaje indicándolo.

Sub FindProject1()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell) = sProj Then             wks.Activate             wks.Range(sCell).Activate             MsgBox ("Project '" & sProj & "' is in:" & vbCrLf & wks.Name)

Exit Sub         End If     Next wks     MsgBox ("Project is not found")

End Sub

Hay dos problemas potenciales con esta macro. Primero, si el número de su proyecto es en realidad un número, es posible que la macro no lo encuentre, ya que busca cadenas de texto. En segundo lugar, si hay varias hojas de trabajo que usan el mismo número de proyecto, nunca lo sabrá porque la macro siempre se detiene en la hoja de trabajo con el primer número de proyecto coincidente en la celda C4. Puede superar ambos problemas realizando un par de cambios en la macro.

Sub FindProject2()

Dim wks As Worksheet     Dim sCell As String     Dim sProj As String     Dim vSheets As New Collection     Dim sTemp As String

sCell = "C4" 'cell with Project number     sProj = InputBox("What Project are you looking for?")

For Each wks In Worksheets         If wks.Range(sCell).Value = sProj Or _           wks.Range(sCell).Value = Val(sProj) Or _           wks.Range(sCell).Text = sProj Then             vSheets.Add wks         End If     Next wks

Select Case vSheets.Count         Case 0             sTemp = "Project " & sProj & " was not found "

sTemp = sTemp & "in this workbook."

MsgBox sTemp         Case 1             wks.Activate             wks.Range(sCell).Activate         Case Else             sTemp = "Project " & sProj & " was found on more "

sTemp = sTemp & "than one sheet:" & vbCrLf             For Each wks In vSheets                 sTemp = sTemp & wks.Name & vbCrLf             Next wks             MsgBox sTemp     End Select End Sub

Con esta versión de la macro, la hoja de trabajo del proyecto se muestra solo si el número de proyecto es único entre todas las hojas de trabajo. Si hay varias instancias en las que el número de proyecto es el mismo, se le notifica el nombre de esas hojas de trabajo, pero no se selecciona ninguna hoja de trabajo.

Si lo desea, puede simplificar mucho la macro cambiando el nombre de todas sus hojas de trabajo al número de proyecto. Esto también tendría el beneficio adicional de garantizar que ningún proyecto utilice realmente dos hojas de trabajo. (Todos los nombres de las hojas de trabajo deben ser únicos, por lo que si cada hoja de trabajo usa un número de proyecto como nombre, solo podría tener una hoja de trabajo por número de proyecto). Si adopta este enfoque, podría usar una macro similar a la siguiente para buscar y saltar a la hoja de trabajo deseada:

Sub FindProject3()

On Error GoTo ErrorHandler     Sheets(InputBox("Enter Project Number:")).Activate     Exit Sub ErrorHandler: MsgBox "No such Project"

End Sub

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (13489) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.