Foto de Daiane J.
Daiane há 3 anos
Enviada pelo
Site

Filtrar data em vba

Olá, gostaria de saber como faço para filtrar dados com base em datas maiores ou igual a hoje em vba.

Professor Eduardo Q.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 3 anos
Contatar Eduardo

Boa tarde Daiane. Existem várias maneiras de filtrar datas em VBA. O ideal é que voce seja mais específica. 

exemplo:

O filtro é em um objeto ?

O filtro é direto na planilha ?

O filtro puxa dados da planilha e exibe em um listbox ?

A data referencia de "HOJE" está na planilha ou em um objeto ?

Todos esses detalhes influenciam diretamente na resposta para sua dúvida.

Considerando que sua tabela contenham dados orientados por uma coluna de datas direto na planilha e hoje seja dia 02/05:

_/        A                       B                     C

1     DATA            /   Nome       /     VALOR

2     01/05/2022       Edu        /      10,00

3     02/05/2022       Paulo     /       12,00

4     03/05/2022       Flavio     /       13,00

5     04/05/2022       Ana       /        9,00

 

A maneira mais facil de gerenciar isso atraves de um código em VBA é transformando no proprio código as datas da coluna A em numero e o campo com sua data Hoje tambem em numero. Faça a sequencia do filtro e no fim do codigo transforme novamente a os numeros em datas. Dessa forma voce pula muitas etapas de compatibilizar o dado DATA no VBA com o DADO data na planilha.

As configurações de objetos e procedimentos no VBA, consideram MM/DD/AAAA e na planilha DD/MM/AAAA e por isso, quando fazemos os filtros, sempre retorna VAZIO.

Essas datas filtradas podem até serem utilizadas atravez de variavel. Exemplo :

 

Abaixo o código VBA :

  'declaração da variavel que recebera a data em formato numero
    Dim DtH As Single
    
    ' Transformandao os dados da coluna A em numero
    Columns("A:A").Select
    Selection.NumberFormat = "0.00"
    
    
    'inserindo a data hoje na celula F1
    Range("F1").Select
    ActiveCell.FormulaR1C1 = "=TODAY()"
    
    'transformando a data hoje na celula F1 em numero
    Range("F1").Select
    Selection.NumberFormat = "0.00"
    
    'Carregando a variavel DtH com a data na celula F1 já no formato numero
    DtH = Sheets("Planilha").Range("F1")
    
    'Aplicando o filtro e utilizando no critério ">=" concatenado com a variavel com a data
    Range("A1:C1").Select
    Selection.AutoFilter
        ActiveSheet.Range("$A$1:$C$5").AutoFilter Field:=1, Criteria1:=">=" & DtH, _
        Operator:=xlAnd
    
    'Selecionando as colunas filtradas de A até C e copiando
    Columns("A:C").Select
    Selection.Copy
    
    'Colando somente valores filtrados na planilha 2
    Sheets("planilha2").Select
    Columns("A:A").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    
    
    ' Transformando todos os dados de Data novamente no formato DATA e eliminado o filtro na planilha 1
    Range("E9").Select
    Sheets("Planilha1").Select
    Application.CutCopyMode = False
    ActiveSheet.Range("$A$1:$C$5").AutoFilter Field:=1
    Columns("A:A").Select
    Selection.NumberFormat = "m/d/yyyy"
    Range("F1").Select
    Selection.NumberFormat = "m/d/yyyy"
    Range("A1").Select
    Selection.AutoFilter
    Range("E10").Select
    Sheets("Planilha2").Select
    Columns("A:A").Select
    Selection.NumberFormat = "m/d/yyyy"
    Range("E8").Select
    
    ' nesse ponto voce tem a planilha 1 com os dados originais e na planilha 2 somente os dados com data maiores que HOJE
End Sub

 

Faça a planilha conforme indicado e copie o codigo vba acima e veja cada etapa do codigo funcionar

Obs: não esqueça de ajustar as datas da sua tabela para que tenha datas antes e depois da sua data HOJE e também de criar  a planilha 2 vazia para receber os dados filtrados.

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Tire dúvidas com IA
Resposta na hora da Minerva IA
Enviar dúvida
Professor Gabriel L.
Respondeu há 1 ano
Contatar Gabriel

Sub FiltrarPorData()
    Dim ws As Worksheet
    Dim dataAtual As Date
    Dim rng As Range
    
    ' Defina a planilha onde estão os dados
    Set ws = ThisWorkbook.Worksheets("Nome da Planilha")
    
    ' Defina a data atual como a data de hoje
    dataAtual = Date
    
    ' Limpe qualquer filtro existente
    ws.AutoFilterMode = False
    
    ' Defina o intervalo de dados a ser filtrado (altere "A2" para a célula inicial da sua coluna de datas)
    Set rng = ws.Range("A2:A" & ws.Cells(ws.Rows.Count, "A").End(xlUp).Row)
    
    ' Aplique o filtro para mostrar apenas as datas maiores ou iguais à data atual
    rng.AutoFilter Field:=1, Criteria1:=">=" & dataAtual, Operator:=xlAnd
    
    ' Caso queira copiar os dados filtrados para outra área, você pode fazer algo como:
    ' rng.SpecialCells(xlCellTypeVisible).Copy Destination:=ws.Range("B2")
    
    ' Lembre-se de desligar o filtro ao final do procedimento (caso não queira manter o filtro)
    ' ws.AutoFilterMode = False
End Sub

Um professor já respondeu

Envie você também uma dúvida grátis
Ver resposta
Minerva IA
do Profes
Respostas na hora
100% no WhatsApp
Envie suas dúvidas pelo App. Baixe agora
Prefere professores para aulas particulares ou resolução de atividades?
Aulas particulares
Encontre um professor para combinar e agendar aulas particulares Buscar professor
Tarefas
Envie sua atividade, anexe os arquivos e receba ofertas dos professores Enviar tarefa