Encontrar una hoja de trabajo con un valor específico en una celda específica (Microsoft Excel)
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:
-
Presione Ctrl + F. Excel muestra la pestaña Buscar del cuadro de diálogo Buscar y reemplazar.
-
Haga clic en el botón Opciones para expandir el cuadro de diálogo. (Ver figura 1)
-
Usando la lista desplegable Dentro, elija Libro de trabajo.
-
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.
-
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.