Excel - Macro para Consulta entre Datas (com Formulário) | Excelmax Soluções e Controles

segunda-feira, abril 16, 2012

Excel - Macro para Consulta entre Datas (com Formulário)

Macro para consulta entre datas com Formulário

data, excel, macro, 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:
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.
excel, vba


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).
A figura ao lado destaca o Formulário, as Propriedades e o Código (Macro). 


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).


DownloadExtrair Dados entre Datas - com Formulário

ivairferrari
Não deixe de se increver em meu canal no YouTube:

    http://www.youtube.com/ivairferrari

Participe deste Site:
    Excel - ExcelMax® Soluções



IMPORTANTE: Deixe seu comentário. Compartilhe com seus amigos.


Até a próxima ...
Professor Ivair Claudio Ferrari

10 comentários:

  1. Como dizia um velho amigo meu: Isso é coisa de outro mundo. Fantástico professor !!!!!!!!!!!!!!!!!!!!!!!

    ResponderExcluir
  2. Parabéns pela didática. As imagens/figuras em suas postagens dão muita clareza para o entendimento. Pretendo adquirir sua apostila, Favor informar.

    ResponderExcluir
  3. Parabéns pelo site. Tudo perfeito e bem explicado.

    ResponderExcluir
  4. Olá, tenho uma necessidade de fazer um filtro desse, peguei seu exemplo, alterei conforme minha planilha e não funcionou.

    na 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

    ResponderExcluir
    Respostas
    1. Caro Amigo James,
      Pelo 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

      Excluir
  5. Gostaria de realizar esse filtro, mas apenas pelo Mês, desconsiderando o ano. Como Faço?

    ResponderExcluir
  6. estava com uma bronca com data e não lembrava do Cdate()
    Obrigado

    ResponderExcluir

Seja um participante desta comunidade !
Deixe aqui seu comentário e/ou sugestão.
Obrigado !

Ivair Claudio Ferrari