#comobuscarundatoenexcel #seleccionarceldasenexcel #seleccionarceldasespecificasenexcel #extraerenexcel #seleccionarceldasenexcelVBA
Hola emprendedores y entusiastas productivos. En este artículo vamos a realizar múltiples selecciones de celdas por medio de la búsqueda de un valor, ya sea en filas, en columnas, en tablas o en matrices dinámicas. Estas selecciones sirven para un sinnúmero de propósitos; para ilustrar varias maneras de seleccionar una celda en específico, se presenta el siguiente ejemplo:
Tenemos una tabla de datos realizado en la hoja "Hoja1" de un libro de Excel. En las filas, una variedad de productos y en las columnas una variedad de precios. En la celda C2 se coloca el valor a buscar, y con el botón "Seleccionar" se ejecuta la macro para hacer referencia a la celda en cuestión; como se observa en la siguiente imagen.
Con la ilustración dada, recorramos los caminos por los que frecuentemente se requieren seleccionar celdas:
Selección de celda específica en fila
Además del código objetivo para ejecutar esta acción, se requiere de código adicional que se llamarán controladores de error para guiar al usuario y generar una correcta entrada de datos. A continuación, el código VBA:
'Si componente no existe (control error 1)
valor = Sheets("Hoja1").Range("C2").Value
Set busca = Sheets("Hoja1").Range("D5:D15").Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
If busca Is Nothing Then
MsgBox ("Valor no existe"), vbCritical
Exit Sub
End If
'Si el campo está vacío (control error 2)
If Sheets("Hoja1").Range("C2").Value = "" Then
MsgBox ("Por favor, colocar un valor a buscar"), vbCritical
Exit Sub
End If
'Seleccionar valor en fila
Range("D5:D15").Find(What:=Range("C2")).Activate
Acá podemos observar su ejecución:
Selección de celda específica en columna
Además del código objetivo para ejecutar esta acción, se requiere de código adicional que se llamarán controladores de error para guiar al usuario y generar una correcta entrada de datos. A continuación, el código VBA:
'Si componente no existe (control error 1)
valor = Sheets("Hoja1").Range("C2").Value
Set busca = Sheets("Hoja1").Range("D4:I4").Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
If busca Is Nothing Then
MsgBox ("Valor no existe"), vbCritical
Exit Sub
End If
'Si el campo está vacío (control error 1)
If Sheets("Hoja1").Range("C2").Value = "" Then
MsgBox ("Por favor, colocar un valor a buscar"), vbCritical
Exit Sub
End If
'Seleccionar valor en columna
Range("D4:I4").Find(What:=Range("C2")).Activate
Acá podemos observar su ejecución:
Intersección de celda específica en fila-columna
Además del código objetivo para ejecutar esta acción, se requiere de código adicional que se llamarán controladores de error para guiar al usuario y generar una correcta entrada de datos. A continuación, el código VBA:
'Si componente no existe en fila (controlador de error 1)
valor = Sheets("Hoja1").Range("C2").Value
Set busca = Sheets("Hoja1").Range("D5:D15").Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
If busca Is Nothing Then 'Si no encuentra un componente entonces:
MsgBox ("Valor no existe"), vbCritical
fila = fila + 1
Exit Sub
End If
'Si componente no existe en columna (controlador de error 2)
valor = Sheets("Hoja1").Range("C3").Value
Set busca = Sheets("Hoja1").Range("D4:I4").Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
If busca Is Nothing Then 'Si no encuentra un componente entonces:
MsgBox ("Valor no existe"), vbCritical
Exit Sub
End If
'Si el campo está vacío (controlador de error 3)
If Sheets("Hoja1").Range("C2").Value = "" Then
MsgBox ("Por favor, colocar un valor a buscar"), vbCritical
Exit Sub
End If
'Si el campo está vacío (controlador de error 4)
If Sheets("Hoja1").Range("C3").Value = "" Then
MsgBox ("Por favor, colocar un valor a buscar"), vbCritical
Exit Sub
End If
'Intersección fila-columna
Cells(Range("D5:D15").Find(What:=Range("C2"), LookAt:=xlWhole).Row, _
Range("E4:I4").Find(What:=Range("C3"), LookAt:=xlWhole).Column).Select
Acá podemos observar su ejecución:
Seleccionar rango de filas según valor o celda específica
Además del código objetivo para ejecutar esta acción, se requiere de código adicional que se llamarán controladores de error para guiar al usuario y generar una correcta entrada de datos. A veces, los controladores de error pueden encontrarse en conjunto al código objetivo para mayor eficiencia. A continuación, el código VBA:
'Si el campo está vacío
If Sheets("Hoja1").Range("C2").Value = "" Then
MsgBox ("Por favor, colocar un valor a buscar"), vbCritical
Exit Sub
End If
'Variable
valor = Sheets("Hoja1").Range("C2").Value
'Seleccionar rango de filas al encontrar valor
Set busca = Sheets("Hoja1").Range("D:D").Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
If Not busca Is Nothing Then
Range("D" & busca.Row & ":I" & busca.Row).Select
Else
MsgBox "Valor no existe"
End If
Acá podemos observar su ejecución:
Intersección de celda específica en fila-columna en matriz dinámica
Si la fila o la columna es dinámica, se puede extender el rango sin que esto implique ralentizar la ejecución del código, de la siguiente forma:
'Intersección fila columna en matriz dinámica
Cells(Range("D5:D1048576").Find(What:=Range("C2"), LookAt:=xlWhole).Row, _
Range("E4:XFD4").Find(What:=Range("C2"), LookAt:=xlWhole).Column).Select
Selección de celda en matriz según valor
Si se busca un valor dentro de toda una matriz, lo único que se debería hacer es variar el rango de búsqueda, como se visualiza a continuación:
'Si el campo está vacío (controlador de error)
If Sheets("Hoja1").Range("C2").Value = "" Then
MsgBox ("Por favor, colocar un valor a buscar"), vbCritical
Exit Sub
End If
'Variable
valor = Sheets("Hoja1").Range("C2").Value
'Seleccionar celda dentro de una tabla
Set busca = Sheets("Hoja1").Range("D4:I15").Find(valor, LookIn:=xlValues, LookAt:=xlWhole)
If Not busca Is Nothing Then
busca.Select
Else
MsgBox "Valor no existe"
End If
Acá podemos observar su ejecución:
Si deseas descargar el archivo utilizado para los ejemplos. Puedes hacer click aquí.
Estas macros ganan más importancia cuando se realizan en conjunto con otras acciones. Si deseas armar tus propios formularios y construir tu propia base de datos a partir de nuestro código ya desarrollado puedes considerar adquirir nuestro programa de gestión y planificación de inventarios para sistemas de producción (MRP) a un costo bastante accesible. Con un único pago y licencia perpetua, el mismo te permite editar todo el código sin ningún tipo de restricción, y muchos otros beneficios y funcionalidades que puedes observar en esta web.
Por mi parte, me despido, sin antes desearles un genial día. Y, no se olviden de sonreír, para recordar que la vida sonríe siempre.
Comments