Filtrar entre fechas Formulario VBA

Quisiera ayuda en un problema que tengo para filtrar una BB. DD entre 2 fechas... Adjunto un archivo ej. Para aplicar filtro entre fechas por medio de un formulario en VBA excel.

La idea es poder poner el criterio (fecha) en textboxs y que estos tomen la info en la hoja de "base de datos" y tras pulsar el boton calcular, se muestre el resultado en hoja "resultados"

Respuesta

Aquí tienes un código y espero te sirva

Sub filtrar()
Dim dStartDate As Date
Dim dEndDate As Date
Dim myrango, myrango1 As Range
Dim celda As Object
Dim reg, uf As Integer
Dim aei As String
dStartDate = UserForm1.TextBox1.Text
dEndDate = UserForm1.TextBox2.Text
Set myrango = Sheets("resultado").Range("A:A")
Sheets("resultado").Range("A2:E" & WorksheetFunction.CountA(myrango) + 3).ClearContents
Set myrango1 = Sheets("base de datos").Range("A:A")
For Each celda In Sheets("base de datos").Range("e2:e" & WorksheetFunction.CountA(myrango1) + 3)
If NUMEROENTRE(celda, dStartDate, dEndDate) = True Then
Sheets("resultado").Range("A" & Rows.Count).End(xlUp)(2) = celda.Offset(0, -4).Value
Sheets("resultado").Range("B" & Rows.Count).End(xlUp)(2) = celda.Offset(0, -3).Value
Sheets("resultado").Range("C" & Rows.Count).End(xlUp)(2) = celda.Offset(0, -2).Value
End If
Next celda
Sheets("resultado").activate
Exit Sub
End
End Sub
'*************************************************************************************
'*FUNCION CREADA PARA LA COMPARACION DE LAS FECHAS, PUEDE SER USADA COMO FORMULA PARA*
'*COMPARAR DATOS NUMERICOS ENTRE UN MINIMO Y UN MAXIMO                               *
'*NO DEBE DE SER BORRADA                                                             *
'*************************************************************************************
Function NUMEROENTRE(Numero, lim_inf, lim_sup)
NUMEROENTRE = False
If Numero >= lim_inf And Numero <= lim_sup Then
     NUMEROENTRE = True
End If
End Function

En el botón Calcular debes colocar este código

Private Sub CommandButton1_Click()
Call filtrar
End Sub

1 respuesta más de otro experto

Respuesta
1

Te anexo una macro. Considera que en ambos textbox deberás capturar un fecha con el formato dd/mm/aaaa, por ejemplo: para captura el 15 de junio de 2014, deberás capturarlo así:

15/06/2014

De esta forma la macro podrá hacer los filtros de manera adecuada.

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h1 = Sheets("Base de datos")
    Set h2 = Sheets("resultados")
    h2.Cells.Clear
    h2.[X1:Y1] = h1.[B1]
    h2.[X2] = ">=" & Evaluate("=date(" & Year(TextBox1) & "," & Month(TextBox1) & "," & Day(TextBox1) & ")")
    h2.[Y2] = "<=" & Evaluate("=date(" & Year(TextBox2) & "," & Month(TextBox2) & "," & Day(TextBox2) & ")")
    h1.[A1].CurrentRegion.AdvancedFilter 2, CriteriaRange:=h2.[X1:Y2], CopyToRange:=h2.[A1:C1]
End Sub

Añade tu respuesta

Haz clic para o