.
Buscar datos en un rango de fechas con macro, algo que es fundamental para gente que trabaja arduamente con libros de Excel registrando todo tipo de datos cuyo elemento común en la mayoría es la fecha del registro.
Este ejemplo precisamente muestra lo mencionado, es decir Como Filtrar por un Rango de Fechas Estando la Base de Datos en Otro Libro de Excel distinto al cual estamos trabajando, utilizando una combinación de código VBA y SQL, suena difícil, pero no lo es tanto solo de debe poner atención a las explicaciones de este vídeo como el resto de la saga dedicado al tema, en el link encuentras el resto de vídeos relacionados con Conectar Excel con Excel Sentencias SQL anteriormente se vio el mismo ejemplo pero la base de datos se encontraba en el mismo libro de Excel sobre el que se encontraba la macro.
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.
Es necesario para que la macro funcione, en primer lugar que se conecte al Libro Excel que contiene los datos a filtrar, esto se realiza con el siguiente código:
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;»»»
Posteriormente se debe crear la SQL para que consulte los datos en un rango de fecha, se debe establecer la fecha de inicio y de final para el filtrado de datos, en este ejemplo la fecha inicial y final de búsqueda se agregan en las celdas I1 y K1, el códigos es el siguiente:
sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Fecha >= #» & Format(CDate(a.Range(«I1»)), «mm/dd/yyyy») & «# AND Fecha <= #» & Format(CDate(a.Range(«K1»)), «mm/dd/yyyy») & «# ORDER BY fecha ASC»
El código anterior se puede leer como: Seleccione todas las columnas de la tabla Hoja1, cuando se cumpla la siguiente condición: que la fecha que está en la columna fecha sea mayor e igual a la fecha inserta en la celda I1, es decir para que el registro se filtre debe la fecha registrada debe ser mayor e igual a la fecha inicial; la otra condición es que la fecha registrada en la columna fecha debe ser menor o igual a la fecha final, en este ejemplo está en la celda K1.
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
Quizá sea de utilidad también
Como crear un menú que se desplaza a medida que se hace scroll
Como eliminar el botón X o cerrar de un formulario
Como copiar varias tablas vinculadas de Excel a Word
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛⇛
En forma posterior se ejecuta la SQL, los datos filtrados o Recorset se mantendrán en memoria hasta tanto sean usados y la memoria no se haya liberado, se usa el siguiente código:
Set rs = cn.Execute(sql)
Para pegar los datos filtrados en la hoja de Excel se usa:
b.Cells(2, 1).CopyFromRecordset Data:=rs
En este ejemplo los datos se pegan a partir de la celda A2.
Descarga el ejemplo como filtrar entre fecha y fecha con datos contenidos en otro libro utilizando SQL y VBA, lo podrás hacer desde el link del final, a continuación la codificación completa del ejemplo.
Código que se inserta en un módulo
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;»»»
sql = «SELECT * FROM [» & «Hoja1$» & «] WHERE Fecha >= #» & Format(CDate(a.Range(«I1»)), «mm/dd/yyyy») & «# AND Fecha <= #» & Format(CDate(a.Range(«K1»)), «mm/dd/yyyy») & «# ORDER BY fecha ASC»
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
Sub BORRAR()
Sheets(«Hoja2»).Cells.Clear
End Sub
Si te gustó por favor compártelo con tus amigos
If you liked please share it with your friends