Conectar Excel con Excel Consulta SQL Un Criterio con Datos Otro Libro





El ejemplo que se presenta a continuación permite Filtrar Datos de Excel en Base a Criterio donde la Base de Datos está en Otro Libro distinto en el cual estamos trabajando, la búsqueda y extracción de datos se realiza utilizando una conexión ADODB - OLEDB, combinando VBA y SQL, es decir se filtran datos mediante sentencias SQL.

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.









   


Para una mejor compresión debes descargar y descomprimir el archivo rar de ejemplo, al descomprimir puedes guardar en cualquier directorio de la PC, la única condición es que estén los dos archivos en el mismo directorio, porque el archivo con la macro buscará los datos en el libro que contiene la base de datos.

Presionando el botón se ejecuta una macro que conecta el libro de Excel que contiene la macro de Excel con el libro que contiene la base de datos, lograda esa conexión a través de una sentencia SQL se logra filtrar los datos, teniendo presente que no se abre el libro de Excel con la base de datos, los datos pueden ser obtenidos por la conexión establecida, dicha conexión se realiza con el siguiente código, en la variable mybook se guarda la dirección del archivo con la base de datos.

mybook = ThisWorkbook.Path & "\414 Conectar Excel con Excel Consulta SQL Base Datos.xlsx"

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

Realizada la conexión se debe realizar la consulta SQL o string de consulta que también se le denomina de la siguiente forma:

sql = "SELECT * FROM [" & "Hoja1$" & "] WHERE Ucase(" & a.Range("H1") & ") LIKE Ucase('%" & Range("H2") & "%') ORDER BY ID ASC"

En el caso anterior la SQL filtra todos los registros de la hoja1 con la condición que el campo "Marca" sea igual al valor ingresado en la cela H2, no solo filtra los valores que coinciden plenamente no lo ingresado sino todos aquellos registros que contengan en la cadena de texto del registro "Marca" el texto ingresado en H2, ejemplo si se ingresa la marca ARCOR, buscará en la columna "Marca" todo lo que contenga la cadena de caracteres ARCOR, es decir buscará por ejemplo ARCOR, ARCOR GALLETAS, etc.

La siguiente SQL se usa cuando se tilde el casillero del checkbox, donde se expresa que se requiere solo se filtren la coincidencias exactas, extrayendo los datos que coinciden exactamente con la cadena de texto ingresada en H2, es decir solo extraerá la coincidencia iguales a la cadena ingresada.

sql = "SELECT * FROM [" & "Hoja1$" & "] WHERE Ucase(" & a.Range("H1") & ") LIKE Ucase('" & Range("H2") & "') ORDER BY ID ASC"

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

Como buscar archivos en una carpeta y hacer link al fichero


Como truncar o cortar el nombre de un archivo a una cantidad especifica de caracteres

Como pasar datos de un listbox a otro con Enter

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



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

Para ejecutar la SQL se usa:

Set rs = cn.Execute(sql)

Para grabar los datos obtenidos al ejecutar la SQL, que están contenidos en memoria, se usa el siguiente código:

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

El ejemplo de macro que permite filtrar por un criterio con SQL estando la base de datos en otro libro, se puede descargar desde el final del post, a continuación se expone el código completo que contiene el ejemplo que se descarga.

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")


mybook = ThisWorkbook.Path & "\414 Conectar Excel con Excel Consulta SQL Base Datos.xlsx"
cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & mybook & ";Extended Properties=""Excel 12.0;HDR=Yes;"""

If a.CheckBox1 = False Then
sql = "SELECT * FROM [" & "Hoja1$" & "] WHERE Ucase(" & a.Range("H1") & ") LIKE Ucase('%" & Range("H2") & "%') ORDER BY ID 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 registros 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