Filtrar data em vba

Bancos de dados SQL Server

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

Foto de Daiane J.
Daiane perguntou há 2 anos

Sabe a resposta?

Ganhe 10 pts por resposta de qualidade
Responder dúvida
2 respostas
0
votos
Nenhum usuário votou nessa resposta como útil.
Professor Eduardo Q.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 2 anos

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.

Envie uma dúvida gratuitamente

Envie sua primeira dúvida gratuitamente aqui no Tira-dúvidas Profes. Nossos professores particulares estão aqui para te ajudar.

0
votos
Nenhum usuário votou nessa resposta como útil.
Professor Gabriel L.
Identidade verificada
  • CPF verificado
  • E-mail verificado
Respondeu há 9 meses

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

Professores particulares de Bancos de dados

+ Ver todos
Encontre professor particular para te ajudar nos estudos
R$ 75 / h
Eduardo Q.
Belo Horizonte / MG
Eduardo Q.
5,0 (1 avaliação)
Horas de aulas particulares ministradas 1 hora de aula
Tarefas resolvidas 1 tarefa resolvida
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Graduação: Mecatrônica Industrial (universidade Anhanguera)
Experiência de mais 15 anos em excel, dashboard e vba em treinamentos intensivos com alto desempenho, para quem precisa aprender muito em pouco tempo!
R$ 70 / h
Lucas M.
Maceió / AL
Lucas M.
4,4 (36 avaliações)
Horas de aulas particulares ministradas 373 horas de aula
Tarefas resolvidas 2 tarefas resolvidas
Identidade verificada
  • CPF verificado
  • E-mail verificado
Bancos de Dados Relacionais (SQL) Bancos de Dados Não Relacionais (NoSQL) Bancos de dados - Entidade
Especialização: Segurança e defesa cibernética (Unninter)
Aulas presenciais e online de computação e programação com foco em projetos reais.
R$ 70 / h
Vinícius B.
Santo André / SP
Vinícius B.
5,0 (13 avaliações)
Horas de aulas particulares ministradas 17 horas de aula
Tarefas resolvidas 5 tarefas resolvidas
Identidade verificada
  • CPF verificado
  • E-mail verificado
1ª hora grátis
Bancos de dados - Entidade Transações SQL (SQL Transactions) Modelagem de Bancos de Dados
MBA: Business Intelligence (Faculdade Descomplica)
Te ensino a programar. Professor de programação, com 5 anos de atuação em .net, sql, entity framework, scrum etc.