Filtro por data em ...
 
Notifications
Clear all

Filtro por data em VBA

4 Posts
2 Usuários
0 Reactions
4,900 Visualizações
(@ericks)
Posts: 0
New Member
Topic starter
 

Tenho uma base de pedidos e quero filtrá-los para um intervalo de datas (data inicial será informada em uma célula e a data final em outra) em vba.

Sub atualizar_resultado()

Dim data_ini As Date
Dim data_fin As Date

data_ini = Range("E4")
data_fin = Range("F4")

Sheets("BASE").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AK$50000").AutoFilter Field:=7, Criteria1:= _
">=data_ini", Operator:=xlAnd, Criteria2:="<=data_fin"

End Sub

Mas o filtro retorna vazio, dessa forma ele só funciona se a data for digitada Manualmente, como:

ActiveSheet.Range("$A$1:$AK$50000").AutoFilter Field:=7, Criteria1:= _
">=01/07/2014", Operator:=xlAnd, Criteria2:="<=08/07/2014"

Como eu poderia fazer essa filtragem?

 
Postado : 09/07/2014 8:30 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

ericks, Boa tarde!

Tente adaptar esse código:

Sub Filtro()
    Plan1.Range("A1:H100").ClearContents
    
    DataIni = InputBox("Digite a data Inicial") 'Aqui não altere
    dataFim = InputBox("Digite a data Final") 'Aqui não altere
    
    lin = 2
    linha = 2
    
    Do Until Plan1.Cells(lin, 1) = ""
        If Plan1.Cells(lin, 2) >= CDate(DataIni) And Plan1.Cells(lin, 2) <= CDate(dataFim) Then
            Plan1.Cells(linha, 6) = Plan1.Cells(lin, 1)
            Plan1.Cells(linha, 7) = CDate(Plan1.Cells(lin, 2))
            Plan1.Cells(linha, 8) = Plan1.Cells(lin, 3)
            linha = linha + 1
        End If
        lin = lin + 1
    Loop
    MsgBox "Processo concluído com sucesso - de: " & DataIni & " até: " & dataFim
End Sub

Caso não consiga, anexe sua planilha compactada aqui no fórum que monto para você!

Att,

 
Postado : 09/07/2014 10:42 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Experimente assim:

Sub atualizar_resultado()

Dim data_ini As Date
Dim data_fin As Date

data_ini = Format(Range("B4"), "mm/dd/yyyy")
data_fin = Format(Range("F4"), "mm/dd/yyyy")

Sheets("BASE").Select
Selection.AutoFilter
ActiveSheet.Range("$A$1:$AK$50000").AutoFilter Field:=7, Criteria1:= _
">=" & data_ini, Operator:=xlAnd, Criteria2:="<=" & data_fin

End Sub
 
Postado : 09/07/2014 10:45 am
(@ericks)
Posts: 0
New Member
Topic starter
 

Muito obrigado!!

 
Postado : 09/07/2014 12:58 pm