top of page
Foto del escritorSistema MRP

¿Cómo buscar un dato en Excel y VBA?

Actualizado: 13 dic 2019


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.


Seleccionar celdas específicas con macros VBA, funcionalidad que puede requerirse en un sistema de gestión y control de inventarios de producción con Excel y VBA
Seleccionar celdas específicas con macros VBA

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.

385 visualizaciones0 comentarios

Comments


bottom of page