Saltar al contenido

Conectar Excel con Excel Consulta SQL Varios Criterio con Datos Mismo Libro


.

Esta macro que se presenta en el post muestra como buscar datos en el mismo libro dependiendo de varios criterios utilizando SQL, es decir que la macro filtrará los datos dependiendo de varias condiciones y los mostrará en otra hoja de Excel, la base de datos donde se buscan los datos están en el mismo libro de Excel, todo lo anterior se realiza combinando VBA y SQL.

Al usar SQL se pueden realizar búsqueda muchísimos más rápida, es bastante útil para bases de datos grandes, ya que la rapidez con se buscan y muestran los datos es inigualable, este es un vídeo de la saga de vídeos dedicados a combinar VBA con SQL sigue el link para ver la saga completa en nuestro canal de YouTube, suscribe y recibirás el contenido actualizado y gratuito que semana a semana se publica.

Descargar el ejemplo en forma gratuita sin ninguna restricción desde el final del post, 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.

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.

  
Mira la maro 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.


if (payload.eventType == ‘subscribe’) {
// Add code to handle subscribe event.
} else if (payload.eventType == ‘unsubscribe’) {
// Add code to handle unsubscribe event.
}
if (window.console) { // for debugging only
window.console.log(‘YT event: ‘, payload);
}
}

 

Lo primero que se debe hacer es descargar el ejemplo que se realiza desde el final del post, una vez abierto el libro ejecutar la macro que está contenida ne el botón, la macro tiene en cuenta los criterios que están dados en las celdas I1, K1 y L1 es decir buscará por marca cuyo criterio está en I1, luego por valores mayores, condición que está en K1, además de la condición de L1 donde se expone el valor al cual deben ser mayores los registros que se filtren.

El filtrado de datos se hace a través de una conexión ADODB – OLEDB, usando el siguiente código:

cn.Open «Provider=Microsoft.Jet.OLEDB.4.0;» & «Data Source=» & ThisWorkbook.FullName & «;Extended Properties=»»Excel 8.0;HDR=Yes;»»»

Se debe tener en cuenta que se está usando Excel 365 / Excel 2016, posterior a ellos se realiza la SQL o string de consulta en este caso pueden ser dos distintas, ya que existe un checkbox donde se indica si se requiere una coincidencia exacta o también se filtrarán registros que contengan la cadena de texto o palabra escrita en la celda I1.

sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘%» & Range(«I1») & «%’) AND pv » & a.Range(«K1″) & » » & a.Range(«L1″) & » ORDER BY pv ASC»

El String de consulta se lee así: Seleccione todas las columnas de la hoja1 cuando la columna «Marca» sea al valor contenido en la celda H1 y además la columna «PV» sea mayor  (en este ejemplo es el valor contenido en K1) al valor contenido en la celda L1 (en ese ejemplo ese valor es 5); luego ordene los datos en forma ascendente por la columna «PV».

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

Quizá sea de utilidad también

Como dar formato de fecha a textbox de userform de Excel

Como seleccionar con macro impresora distinta a la activa

Como determinar si una celda tiene formulas

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

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

Posteriormente se ejecuta la SQL para que filtre los datos dependiendo de las condiciones dadas, manteniendolos en memoria, de esta forma:

Set rs = cn.Execute(sql)

Luego se copian los datos en el lugar indicado en este caso en la celda A2 de la hoja2., de esta manera:

b.Cells(2, 1).CopyFromRecordset Data:=rs

Para terminar la macro denominada Conectar Excel con Excel Búsqueda de Datos por Varios Criterios con Base de Datos en el mismo Libro, sale un msgbox (quieres aprender más sobre msgbox) mostrando un mensaje si fueron filtrados datos o no existen coincidentes con los criterios dados.

Código que se inserta en un módulo

Sub ConsutaSQLExcel()
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(«Hoja2»)

cn.Open «Provider=Microsoft.Jet.OLEDB.4.0;» & «Data Source=» & ThisWorkbook.FullName & «;Extended Properties=»»Excel 8.0;HDR=Yes;»»»
‘uf = a.Range(«A» & Rows.Count).End(xlUp).Row
If a.CheckBox1 = False Then
sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘%» & Range(«I1») & «%’) AND pv » & a.Range(«K1″) & » » & a.Range(«L1″) & » ORDER BY pv ASC»
Else
sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘» & Range(«H2») & «‘) ORDER BY ID ASC»
‘sql = «SELECT * FROM [» & «Hoja1$A1:V65000» & «] WHERE Ucase(» & a.Range(«H1») & «) LIKE Ucase(‘» & Range(«H2») & «‘) ORDER BY ID ASC»
End If

b.Cells.Clear
a.Range(«A1:G1»).Copy Destination:=b.Range(«A1»)
Set rs = cn.Execute(sql)
b.Cells(2, 1).CopyFromRecordset Data:=rs
b.Range(«B:B»).NumberFormat = «dd/mm/yyyy»
Set rs = Nothing
cn.Close
Set cn = Nothing
If b.Range(«A2») <> Empty Then
MsgBox («La busqueda se realizó con éxito»), vbInformation, «AVISO»
Else
MsgBox («No se encontraron regisgros para el criterio de búsqueda»), vbInformation, «AVISO»
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
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