Filtrar por fecha y mostrar varias columnas en listbox de excel

Me han ayudado mucho con sus ejemplos pero me tope con uno que no encuentro tengo un formulario con dos calendarios uno de inicio y otro para darle fin a la busqueda, lo que queiro es que me cargue las demas columnas de la hoja en el listbox pero no me sale lo tengo asi:

Private Sub CommandButton1_Click()
'mostramos hoja2
Hoja1.Visible = xlSheetVisible
Hoja1.Select
'
'
'Mostrar resultado en ListBox

On Error GoTo Errores

Me.ListBox1.Clear

fecha1 = DTPicker1.Value
fecha2 = DTPicker2.Value
fecha1 = Format(DTPicker1.Value, "yyyy-mm-dd")
fecha2 = Format(DTPicker2.Value, "yyyy-mm-dd")

Range("a1").AutoFilter field:=3, Criteria1:=">=" & fecha1, Operator:=xlAnd, Criteria2:="<=" & fecha2
For Each celda In Range("c2:c" & Range("a1000").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
ListBox1.AddItem celda

i = ListBox1.ListCount - 1
Me.ListBox1.List(i, 1) = celda.Offset(0, 1)
Me.ListBox1.List(i, 2) = celda.Offset(0, 2)
Me.ListBox1.List(i, 3) = celda.Offset(0, 3)

Next
Errores:
MsgBox "Fin de la Busqueda.", vbExclamation, "Atencion Usuario"

'ocultamos la hoja2
Hoja1.Visible = xlSheetVeryHidden
'refrescamos pantalla
Application.ScreenUpdating = True
End Sub

1 respuesta

Respuesta
2

Te anexo la macro actualizada.

Private Sub CommandButton1_Click()
'Act.Por.Dante Amor
    Me.ListBox1.Clear
    '
    For Each celda In Hoja1.Range("C2:C" & Hoja1.Range("C" & Rows.Count).End(xlUp).Row)
        If celda >= DTPicker1 And celda <= DTPicker2 Then
            ListBox1.AddItem celda
            i = ListBox1.ListCount - 1
            Me.ListBox1.List(i, 1) = celda.Offset(0, 1)
            Me.ListBox1.List(i, 2) = celda.Offset(0, 2)
            Me.ListBox1.List(i, 3) = celda.Offset(0, 3)
        End If
    Next
    '
    MsgBox "Fin de la Busqueda.", vbExclamation, "Atencion Usuario"
End Sub

Para leer los datos no es necesario que muestres la hoja, solamente tienes que leer los datos de la hoja1:

For Each celda In Hoja1.Range("C2:C" & Hoja1.Range("C" & Rows.Count).End(xlUp).Row)

Si vas a recorrer todas las celda, tampoco es necesario que filtres.

Y por último en dtpicker tienes almacenada una fecha, por lo tanto, puedes comparar directamente el dtpicker con la celda, sin necesidad de pasar el dtpicker a una variable.


Saludos. Dante Amor
No olvides valorar la respuesta.

Muy excelente la actualización pero lo que quiero visualizar del registro en la hoja es el numero de recibo la cantidad y la fecha y quiero filtrar deterninadas fechas por ejemplo:

tipo de pago  | n°doc |     pago      |     fecha          |

efectivo            2548      $200.00         01/01/2015

Le estaré muy agradecido

¿Ahora no entendí?

¿Qué columnas quieres poner en el listbox?

¿En qué columna está la fecha?

Puedes poner tus ejemplos con las referencias de columnas y filas de tu hoja.

hola buenos dias en si son varias columnas y quiero filtrar determinadas fechas: en la columna 1 tipo de pago, colum 2 numero de recibo, colum 3 pago, colum 4 la mora, colum 5 el total recibido, colum 6 la fecha y en la fila 1 el titulo pero el titulo no importa; lo que pasa que cuando se registran pagos se van a una sola hoja y como se reciben varios pagos en un solo dia por eso quiero filtrar de una fecha a otra para el cuadre:

tipo de pago | n° recibo | pago | mora | total recibido |  fecha            |                             efectivo           3748         500     30        530                11/01/2015                       efectivo           3749         350     0          350                11/01/2015                                  efectivo         3750         150      15        165                12/01/2015

de ante mano muchas gracias por sus respuestas son excelentes.

Saludos

perdon se me movieron las columnas pero el ejemplo es asi:

tipo de pago | n° recibo | pago | mora | total recibido |  fecha            |

efectivo           3748         500     30        530                11/01/2015

efectivo           3749         350     0          350                11/01/2015

efectivo          3750         150      15        165                12/01/2015

Te anexo la macro para que busque la fecha en la columna "F", además te pone todas las columnas desde la "A" hasta la "F", en la macro puedes ver dónde estoy poniendo cada columna, si no quieres que una columna aparezca, simplemente borra o comenta la línea de la macro.

Private Sub CommandButton1_Click()
'Act.Por.Dante Amor
    ListBox1.Clear
    ListBox1.ColumnCount = 6
    '
    For Each celda In Hoja1.Range("F2:F" & Hoja1.Range("F" & Rows.Count).End(xlUp).Row)
        If celda >= DTPicker1 And celda <= DTPicker2 Then
            ListBox1. AddItem
            ListBox1. List(ListBox1.ListCount - 1, 0) = Hoja1. Cells(celda.Row, "A")
            ListBox1. List(ListBox1.ListCount - 1, 1) = Hoja1. Cells(celda.Row, "B")
            ListBox1. List(ListBox1.ListCount - 1, 2) = Hoja1. Cells(celda.Row, "C")
            ListBox1. List(ListBox1.ListCount - 1, 3) = Hoja1. Cells(celda.Row, "D")
            ListBox1. List(ListBox1.ListCount - 1, 4) = Hoja1. Cells(celda.Row, "E")
            ListBox1. List(ListBox1.ListCount - 1, 5) = Hoja1. Cells(celda.Row, "F")
        End If
    Next
    '
    MsgBox "Fin de la Busqueda.", vbExclamation, "Atencion Usuario"
End Sub

¡Gracias! Exelenticima explicación muy buena te lo agradezco mucho!

Buenas tardes siempre admirado por las excelentes respuestas.

Tengo otra pregunta como puedo abrir y ver todos esos datos filtrados en otra hoja de excel.

Y si nos es mucha molestia sumar los valores de las columnas "C" "D" "E" cada una en un textbox por individual

Con todo gusto te ayudo, puedes crear una nueva pregunta y me explicas con ejemplos lo que necesitas.

Si lo deseas, al final del título de la nueva pregunta puedes poner que va dirigida a Dante Amor.

Hola buenos dias perdon por responder tarde, son muchas preguntas que tengo por hacer. Quiero sumar los valores filtrados de  por ejemplo ("D" es pago)("E" es mora)("F" es valor total) con macro que me dio anteriormente le agrege lo encerrado con asterisco y no me sale, lo que quiero es el pago la mora y el total en textbox por aparte

Private Sub CommandButton1_Click()

ListBox1.Clear
ListBox1.ColumnCount = 7
ListBox1.ColumnWidths = "55;190;190;70;70;70;80"
For Each celda In Hoja16.Range("G2:G" & Hoja16.Range("G" & Rows.Count).End(xlUp).Row)
If celda >= DTPicker1 And celda <= DTPicker2 Then
ListBox1.AddItem
ListBox1.List(ListBox1.ListCount - 1, 0) = Hoja16.Cells(celda.Row, "A")
ListBox1.List(ListBox1.ListCount - 1, 1) = Hoja16.Cells(celda.Row, "B")
ListBox1.List(ListBox1.ListCount - 1, 2) = Hoja16.Cells(celda.Row, "C")
ListBox1.List(ListBox1.ListCount - 1, 3) = Hoja16.Cells(celda.Row, "D")
ListBox1.List(ListBox1.ListCount - 1, 4) = Hoja16.Cells(celda.Row, "E")
ListBox1.List(ListBox1.ListCount - 1, 5) = Hoja16.Cells(celda.Row, "F")
ListBox1.List(ListBox1.ListCount - 1, 6) = Hoja16.Cells(celda.Row, "G")
End If
Next
'***********************
Dim varTotal As Long
Dim varRow As Integer

For varRow = 0 To (ListBox1.ListCount - 1)
varTotal = varTotal + ListBox1.Column(3, varRow)

Next

Private Sub CommandButton1_Click()

ListBox1.Clear
ListBox1.ColumnCount = 7
ListBox1.ColumnWidths = "55;190;190;70;70;70;80"
For Each celda In Hoja16.Range("G2:G" & Hoja16.Range("G" & Rows.Count).End(xlUp).Row)
If celda >= DTPicker1 And celda <= DTPicker2 Then
ListBox1.AddItem
ListBox1.List(ListBox1.ListCount - 1, 0) = Hoja16.Cells(celda.Row, "A")
ListBox1.List(ListBox1.ListCount - 1, 1) = Hoja16.Cells(celda.Row, "B")
ListBox1.List(ListBox1.ListCount - 1, 2) = Hoja16.Cells(celda.Row, "C")
ListBox1.List(ListBox1.ListCount - 1, 3) = Hoja16.Cells(celda.Row, "D")
ListBox1.List(ListBox1.ListCount - 1, 4) = Hoja16.Cells(celda.Row, "E")
ListBox1.List(ListBox1.ListCount - 1, 5) = Hoja16.Cells(celda.Row, "F")
ListBox1.List(ListBox1.ListCount - 1, 6) = Hoja16.Cells(celda.Row, "G")
End If
Next
'
Dim Total, Mora, Pago  As Long
Dim varRow As Integer

For varRow = 0 To (ListBox1.ListCount - 1)
pago = pago + ListBox1.Column(3, varRow)

mora = mora + ListBox1.Column(4, varRow)

total = total + ListBox1.Column(5, varRow)

Next

TextBox1 = pago

TextBox2 = Mora

TextBox3 = total

MsgBox "La Busqueda ha Finalizado.", vbInformation, "Atencion Usuario!!!"
End Sub

'*******************************

MsgBox "La Busqueda ha Finalizado.", vbInformation, "Atencion Usuario!!!"
End Sub

espero que pueda comprender mi pregunta gracia

dirigido a "Dante Amor"

Perdón parece que pegue dos veces el ejemplo espero que me pueda comprender

experto Dante Amor la otra pregunta es: Tengo un listbox que me muestra los articulos en inventario que los busco por medio de un textbox lo que quiero es que pueda seleccionar varias filas del listbox del form1 y que por un boton me las traslade a otro listbox que estan en el form2 y luego con un boton del form2 pasarlos a la hoja de excel en una sola celda como puedo hacerle? es para salidas de un inventario

no se si pueda mardarle algun ejemplo por correo? para que lo pueda comprender mejor? Estare muy agradecido por sus respuestas excelentes mi correo es: [email protected]

Podrías crear una nueva pregunta por cada petición, es decir, crea una nueva pregunta en el tema de excel.

http://www.todoexpertos.com/mitodoexpertos/ask/board/269

Si lo deseas, al final del título de la nueva pregunta puedes poner que va dirigida a Dante Amor.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas