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á 2 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
Envie uma dúvida grátis
Resposta na hora da Minerva IA e de professores particulares
Enviar dúvida
Professor Gabriel L.
Identidade verificada
  • CPF verificado
  • E-mail verificado
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
Precisa de outra solução? Conheça
Aulas particulares Encontre um professor para combinar e agendar aulas particulares Buscar professor