Macro para consulta entre datas com Formulário
A análise de informações para a tomada de decisões é de suma importância para pessoas e empresas. Com as diversas mudanças de cenários, o surgimento de novas tecnologias, novos concorrentes entre outras coisas que tornam tudo mais competitivo, surge a necessidade de maior rapidez e qualidade naquilo que fazemos.
No artigo: Excel - Macro para Consulta entre Datas, demonstrei como podemos extrair informações entre duas datas com: extrema rapidez e facilidade com a utilização de Macros no Excel.
A partir deste modelo: vamos aprimorar e deixar tudo mais prático. Para isso, podemos criar um formulário que permita digitar ou selecionar os critérios desejados (como datas) para a extração das informações desejadas.
Artigos escritos anteriormente podem ajudar a construir formulários de pesquisa ou para gerar relatórios:
- Série - Soluções para seu Dia-a-Dia com o Excel - Relatórios com VBA
- Macro para Gerar Relatório Parte III (com Formulário)
- Trabalhando com Objetos no Excel - ComboBox
- Outros artigos que podem ser encontrados aqui.
Neste artigo, darei continuidade ao exemplo anterior, fazendo algumas mudanças, como mencionado, utilizando um formulário.
O modelo (base de dados) que vamos utilizar é o mesmo do artigo anterior - Excel - Macro para Consulta entre Datas.
A partir da base de dados, vamos extrair apenas as informações que estiver dentro do período que vamos estabelecer.
A figura a seguir, representa o Formulário que contém os campos: 'Data Início' e 'Data Fim'.
Alguns aspectos devem ser observados neste formulário para que funcione corretamente e para que a leitura ou o entendimento seja o mais claro possível:
- Devemos nomear (renomear) alguns objetos que serão utilizados no código (macro).
- O(s) códigos(s) deve(m) ser(em) colocado(s) no(s) lugar(es) certo(s).
O código foi colocado no evento 'CLick' do botão 'Executar'.
Como colocar o código num evento de um objeto qualquer: clicamos com o botão esquerdo do mouse (duplo clique).
No código apresentado a seguir, a parte destacada é responsável por aplicar as restrições ou período para extração dos dados.
Do Until Plan1.Cells(lin, 1) = ""
If Plan1.Cells(lin, 2) >= CDate(cdDataINI) And _
Plan1.Cells(lin, 2) <= CDate(cdDataFIM) 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
Explicação:
- Se a data encontrada na célula 'Cells(lin, 2)' for Maior ou Igual (>=) a 'cdDataINI' ; e
- Se a data encontrada na célula 'Cells(lin, 2)' for Menor ou Igual (<=) a 'cdDataFIM' ; então:
- Executa as linhas de comando encontradas entre o 'If .... End If.
Neste artigo não estarei tratando de todos os pontos necessários para o perfeito funcionamento do exemplo. Isto será feito nos próximos artigos (tratamento de erros, formatações, entre outras coisas).
Download: Extrair Dados entre Datas - com Formulário
Participe deste Site:
Excel - ExcelMax® Soluções
IMPORTANTE: Deixe seu comentário. Compartilhe com seus amigos.
Até a próxima ...
Professor Ivair Claudio Ferrari
Como dizia um velho amigo meu: Isso é coisa de outro mundo. Fantástico professor !!!!!!!!!!!!!!!!!!!!!!!
ResponderExcluirParabéns pela didática. As imagens/figuras em suas postagens dão muita clareza para o entendimento. Pretendo adquirir sua apostila, Favor informar.
ResponderExcluirExcelente!!!!!!!!
ResponderExcluirParabéns!!!
ResponderExcluirParabéns pelo site. Tudo perfeito e bem explicado.
ResponderExcluirOlá, tenho uma necessidade de fazer um filtro desse, peguei seu exemplo, alterei conforme minha planilha e não funcionou.
ResponderExcluirna Pla1, tenho da coluna "A1:K100000" os dados, e gostaria que fosse filtrado da coluna: "N2:X100000".
o que está errado no código abaixo??
Private Sub btExecutar_Click()
Plan1.Range("N2:X100000").ClearContents
lin = 2
linha = 2
If cdDataINI = "" Or cdDataFIM = "" Then Exit Sub
Do Until Plan1.Cells(lin, 1) = ""
If Plan1.Cells(lin, 2) >= CDate(cdDataINI) And _
Plan1.Cells(lin, 2) <= CDate(cdDataFIM) Then
Plan1.Cells(linha, 14) = Plan1.Cells(lin, 1)
Plan1.Cells(linha, 15) = CDate(Plan1.Cells(lin, 2))
Plan1.Cells(linha, 16) = Plan1.Cells(lin, 3)
Plan1.Cells(linha, 17) = Plan1.Cells(lin, 4)
Plan1.Cells(linha, 18) = Plan1.Cells(lin, 5)
Plan1.Cells(linha, 19) = Plan1.Cells(lin, 6)
Plan1.Cells(linha, 20) = Plan1.Cells(lin, 7)
Plan1.Cells(linha, 21) = Plan1.Cells(lin, 8)
Plan1.Cells(linha, 22) = Plan1.Cells(lin, 9)
Plan1.Cells(linha, 23) = Plan1.Cells(lin, 10)
Plan1.Cells(linha, 24) = Plan1.Cells(lin, 11)
linha = linha + 1
End If
lin = lin + 1
Loop
MsgBox "Processo concluído - " & cdDataINI & " à " & cdDataFIM
End Sub
James Cidrão
jamescidrao@hotmail.com
Caro Amigo James,
ExcluirPelo que percebi, seu código está correto. Acredito estar faltando alguma coisa como por exemplo os objetos para você digitar as datas ou os nomes destes objetos
No menu 'Downloads', você pode baixar um exemplo:
Macro para Gerar Relatório com Datas - Novo!
Prof. Ivair
Gostaria de realizar esse filtro, mas apenas pelo Mês, desconsiderando o ano. Como Faço?
ResponderExcluirestava com uma bronca com data e não lembrava do Cdate()
ResponderExcluirObrigado
Valeu amigo!
Excluir