Como buscar datos entre rango de fechas





Un suscriptor del canal de YuoTube, me solicitó realizar un ejemplo sobre como buscar datos en un rango de fechas y cargarlos o rellenar el listbox con estos datos; es decir se requería buscar datos de una hoja de Excel entre una fecha inicial y una fecha final, una vez encontrados esos datos, cargarlos en el listbox.

Anteriormente se presentaron muchos ejemplos relacionados con listbox, si estás leyendo este post es posible que te sean de utilidad:


Como escribir en el listbox el total de registros e importes
Como cargar cabecera o header buscar datos por cliente entre rango de fechas y cargar en listbox
Como buscar datos por cliente entre un rango de fechas
Como buscar datos entre rango de fechas
Como pasar datos listbox a otro listbox con enter
Como crear una factura o sale invoice seleccionando cliente de listbox
Como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail
Buscar en listbox mientras se escribe en textbox

Antes de seguir 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 ejemplo de macro muestra como buscar datos entre rango de fecha o entre una fecha inicial y otra fila o entre fecha desde fecha hasta, desde el link del final se puede descargar.

Al descargar el formulario se observará dos textbox y un botón de comando, en el primer textbox se debe ingresar la fecha inicial y en el segundo la fecha final, luego se debe presionar el botón, se podrá observar como que se filtran los datos entre el rango de fechas ingresadas en los textbox, cargándose los datos que se encuentren entre la fecha inicial y la fecha final en el listbox que se encuentra en el formulario.

En este ejemplo además se aprenderá como cargar en variables los datos de textbox, lo cual se hace con el siguiente código, que carga en la variable dato1 y dato2 las fecha inicial y final respectivamente ingresadas en los textbox.

dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)

También se podrá observar como validar el ingreso de datos en textbox, la primer validación es pára que sea ingresado los datos fecha inicial y final antes de ejecutar la macro y la segunda valida que la fecha final no sea menor a la fecha inicial.

If dato2 = Empty Or dato1 = emtpy Then
MsgBox ("Debe ingresar datos para consulta entre rango de fechas"), vbCritical, "AVISO"
Exit Sub
End If
If dato2 < dato1 Then
MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
Exit Sub
End If

Para cargar los datos en el listbox debe pasar el filtro que se da con la instrucción If siguiente, que como se observa compara el dato de la variable fecha inicial y fecha final con el dato de la celda que se está recorriendo en ese momento con el bucle, que es necesario para recorrer todas las celdas de la primera a la última fila con datos, comparando la fecha de la base de datos con las fechas cargadas en los textbox, si se encuentra incluida en el rango de fechas, carga el dato en el listbox.

If dato0 >= dato1 And dato0 <= dato2 Then

También se podrá ver como cargar datos en listbox de varias columnas, lo cual se realiza con el siguiente código:

       Me.ListBox1.AddItem b.Cells(i, 1)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)

El vídeo que sigue muestra una explicación más detallada y gráfica de la macro presentada, 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 como pasar datos de un listbox a otro listbox con enterbuscar en listbox mientras escribes en textbox, como crear una factura o sale invoice y grabar guardar PDF XLS y enviar por mail, libro con las mejores macros del sitio web y muchos ejemplos más.










Código que se inserta en un módulo




Private Sub CommandButton2_Click()
On Error Resume Next
Set b = Sheets("Hoja1")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
dato1 = CDate(TextBox2)
dato2 = CDate(TextBox3)
If dato2 = Empty Or dato1 = emtpy Then
MsgBox ("Debe ingresar datos para consulta entre rango de fechas"), vbCritical, "AVISO"
Exit Sub
End If
If dato2 < dato1 Then
MsgBox ("La fecha final no puede ser mayor a la fecha inicial"), vbCritical, "AVISO"
Exit Sub
End If

b.AutoFilterMode = False
Me.ListBox1 = Clear
Me.ListBox1.RowSource = Clear

For i = 2 To uf
   dato0 = CDate(b.Cells(i, 2).Value)
   If dato0 >= dato1 And dato0 <= dato2 Then
       Me.ListBox1.AddItem b.Cells(i, 1)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 1) = b.Cells(i, 2)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 2) = b.Cells(i, 3)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 3) = b.Cells(i, 4)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 4) = b.Cells(i, 5)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 5) = b.Cells(i, 6)
       Me.ListBox1.List(Me.ListBox1.ListCount - 1, 6) = b.Cells(i, 7)
   End If
Next i
Me.ListBox1.ColumnWidths = "170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt"
End Sub

Private Sub CommandButton3_Click()
Unload UserForm1
End Sub


Private Sub UserForm_Initialize()
Dim fila As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set b = Sheets("Hoja1")
uf = b.Range("A" & Rows.Count).End(xlUp).Row
uc = b.Cells(1, Columns.Count).End(xlToLeft).Address
wc = Mid(uc, InStr(uc, "$") + 1, InStr(2, uc, "$") - 2)
With Me.ListBox1
    .ColumnCount = 7
    .ColumnWidths = "170 pt;50 pt;50 pt;50 pt;50 pt;50 pt;50 pt"
    .RowSource = "Hoja1!A2:" & wc & uf
End With
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
On Error GoTo Fin
If CloseMode <> 1 Then Cancel = True
Fin:
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