Como buscar datos en Excel metodo Find Vs SQL






En el post se muestra una macro que permite buscar datos en Excel, la búsqueda de datos en Excel se hace de dos formas con el método Find y a través de SQL (Structured Query Language), Lenguaje de Consulta Estructurada). Es decir la macro busca un dato determinado en una base de datos de Excel, una vez encontrado el dato, copia y pega todos los registros relacionados con el dato buscado en la hoja de Excel.

Desde el final del post se puede descargar el ejemplo en forma gratuita sin ninguna restricción, el código se puede adaptar a cada necesidad, Aporta por favor para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Si te estás iniciando en la operación de Excel o requieres afirmar conocimientos, recomiendo leer un excelente libro sobre Excel que te ayudará operar las planillas u hojas de cálculo, haz click acá, si quieres aprender sobre Excel, en inglés, entonces debes hacer click here. Si lo que necesitas es aprender o profundizar sobre la programación de macros con VBA este es unos de los mejores cursos on line que he visto en internet.

  

El vídeo verás la macro en acción con una explicación más detallada de su codificación y funcionamiento, recomiendo observar para una más fácil comprensión de la macro; suscribe a nuestra web desde la parte superior derecha de la página ingresando tu mail y a nuestro canal de You Tube para recibir en tu correo vídeos explicativos sobre macros interesantes, como  por ejemplo Recorre fila buscando y comparando datos de dos columnas en hojas distintasbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, trabajando con filas, celdas, columnas, rangos y muchos ejemplos más.









 


El objetivo del post es mostrar como se puede buscar datos en Excel utilizando dos formas diferentes, llegando a un mismo resultado, a mi entender para bases de datos chicas con el método find basta y sobra, pero en bases de datos más grandes SQL se comporta muy bien en cuanto a la rápidez de búsqueda.

Una ventaja que tiene SQL es que no solo se puede buscar datos sino se puede insertar datos, modificar los mismos, como así también usar criterios complejos para el filtro de datos acá tienes más ejemplos que muestran como se usa SQL en Excel.


⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también

Como crear una factura con excel, guardarla y enviarla por mail automáticamente


Como enviar mail con archivo Excel y PDF mediante Outlook con Excel

Como hacer un link o hiperlink a google maps con Excel

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛



⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛

En el ejemplo se debe ingresar el número a buscar en la celda B1, la macro buscará en la columna A de la hoja "URL MACRO EJEMPLOS" el número ingresado en la celda B1, escribiendo los registros asociados de las distintas columnas en la fila 4.

Si se requiere buscar con el método Find se presionara el primero botón, el cual ejecuta para buscar el dato ingresado en la celda B1 en la Columna A de la hoja "URL MACRO EJEMPLOS", con el siguiente código:

busco = Cells(1, "B")
Set codigo = a.Range(r).Find(busco, LookIn:=xlValues, LookAt:=xlWhole)

Si el datos es encontrado es decir no es vacío el objeto código creado a los fines de la búsqueda, determina cual es la fila donde encontró el dato y lo carga en la varible: código.row; que luego se utiliza para obtener el restos de registros relacionados con el dato buscado y que se encuentran en esa fila, el siguiente es el código empleado:

If Not codigo Is Nothing Then
Cells(4, "A") = a.Cells(codigo.Row, 1)


Para realizar la misma búsqueda, pero utilizando SQL se debe proceder a realizar una conexión con el libro de Excel, en este caso es una hoja distinta del mismo libro de Excel, pero puede ser otro libro distinto también, el código es el siguiente:

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;"""

Seguidamente se crea la consulta SQL que es la que se debe ejecutar para poder filtrar el o los datos, es la siguiente:

sql = "SELECT * FROM [" & "URL MACRO EJEMPLOS$" & "] WHERE " & b.Range("A1") & " LIKE " & a.Range("B1") & " ORDER BY N ASC"


La SQL dice: Seleccione todas las columnas de la hoja (FROM) "URL MACRO EJEMPLOS" cuando el dato de la columna A de dicha hoja sea igual a la celda B1 de la hoja Hoja1, luego ordena por la columna denominada "N", aunque en este caso el orden no es necesario ya que es uno solo el dato coincidente, para filtrar los datos se debe ejecutar la SQL, de la siguiente forma:

Set rs = cn.Execute(sql)

Una vez ejecutada la SQL los datos obtenidos o filtrados  (Recordset) se conservan en memoria para ser usados, en este ejemplo los datos encontrados son escritos en la fila 4 de la Hoja1, el código es el siguiente:

a.Cells(4, 1).CopyFromRecordset Data:=rs

A continuación se encuentra el código completo que permite buscar datos en Excel con el Metodo Find y con SQL, seguidamente está el link de descarga del archivo de ejemplo, considera la posibilidad de aportar para sostener el sitio si está dentro de tus posibilidades, desde ya muchas gracias.

Código que se inserta en un módulo

Sub BuscarMetodoFind()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
On Error Resume Next
Dim uf As String
Set a = Sheets("URL MACRO EJEMPLOS")
pf = 2
uf = a.Range("A" & Rows.Count).End(xlUp).Row
r = "A" & pf & ":A" & uf
busco = Cells(1, "B")
Set codigo = a.Range(r).Find(busco, LookIn:=xlValues, LookAt:=xlWhole)

If Not codigo Is Nothing Then
Cells(4, "A") = a.Cells(codigo.Row, 1)
Cells(4, "B") = a.Cells(codigo.Row, 2)
Cells(4, "C") = a.Cells(codigo.Row, 3)
Cells(4, "D") = a.Cells(codigo.Row, 4)
Cells(4, "E") = a.Cells(codigo.Row, 5)
Cells(4, "F") = a.Cells(codigo.Row, 6)
Else
Range("4:4").Clear
Cells(4, "A") = "No se encontraron registros en la base de datos"
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub


Sub FiltroSQLExcel()
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Dim ctl As Object
Dim cn As ADODB.Connection, rs As ADODB.Recordset, sql As String
On Error Resume Next
Set cn = New ADODB.Connection
Set rs = New ADODB.Recordset
Set a = Sheets("Hoja1")
Set b = Sheets("URL MACRO EJEMPLOS")

cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;HDR=Yes;"""
sql = "SELECT * FROM [" & "URL MACRO EJEMPLOS$" & "] WHERE " & b.Range("A1") & " LIKE " & a.Range("B1") & " ORDER BY N ASC"
Set rs = cn.Execute(sql)
a.Cells(4, 1).CopyFromRecordset Data:=rs
Set rs = Nothing
cn.Close
Set cn = Nothing
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub

Sub limpiar()
Range("A4:F4").ClearContents
End Sub

⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛


Si te fue de utilidad puedes INVITARME UN CAFÉ y de esta manera ayudar a seguir manteniendo la página, CLICK para descargar en ejemplo en forma gratuita.


If this post was helpful INVITE ME A COFFEE and so help keep up the page, CLICK to download free example.


Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends