locked
Procurar Valores entre datas RRS feed

  • Pergunta

  • Boa noite pessoal.

    É o seguinte eu estou com uma dúvida em uma planilha minha.

    A dúvida é o seguinte.

    Eu tenho um banco de dados onde são digitados apontamentos de produção, sendo que na coluna "A", é onde são inseridas as DATAS.

    Eu queria uma forma de que quando por exemplo, eu digitasse na célula "G1" O valor da data inicial que eu quero fazer a pesquisa, e na célula "H1" o valor final da data.

    Sendo assim eu queria que gerasse como se fosse um relatório com as Datas do intervalo digitado nas células "G1" e "H1".

    Outro problema é que no meu banco de dados são digitadas várias vezes a mesma data.

    Obs.: Pode ser macro também

    Desde já muito obrigado pela atenção de todos.

    Abraços e boa noite a todos
    segunda-feira, 14 de março de 2011 23:35

Respostas

  • Sub Pesquisar()
      
    Cells.Select
    Selection.EntireRow.Hidden = False
    
    'Limpa a Planilha
    Range("B7:I10003").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    
    
    For i = 7 To Plan8.Cells(1, 1)
    If Plan8.Cells(i, 2) = Plan10.Cells(1, 4) Then
    Plan10.Cells(i, 2) = Plan8.Cells(i, 2)
    Plan10.Cells(i, 3) = Plan8.Cells(i, 3)
    Plan10.Cells(i, 4) = Plan8.Cells(i, 4)
    Plan10.Cells(i, 5) = Plan8.Cells(i, 5)
    Plan10.Cells(i, 6) = Plan8.Cells(i, 6)
    Plan10.Cells(i, 7) = Plan8.Cells(i, 7)
    Plan10.Cells(i, 8) = Plan8.Cells(i, 8)
    Plan10.Cells(i, 9) = Plan8.Cells(i, 9)
    Else
    If Plan8.Cells(i, 2) >= Plan10.Cells(1, 4) And Plan8.Cells(i, 2) <= Plan10.Cells(2, 4) Then
    Plan10.Cells(i, 2) = Plan8.Cells(i, 2)
    Plan10.Cells(i, 3) = Plan8.Cells(i, 3)
    Plan10.Cells(i, 4) = Plan8.Cells(i, 4)
    Plan10.Cells(i, 5) = Plan8.Cells(i, 5)
    Plan10.Cells(i, 6) = Plan8.Cells(i, 6)
    Plan10.Cells(i, 7) = Plan8.Cells(i, 7)
    Plan10.Cells(i, 8) = Plan8.Cells(i, 8)
    Plan10.Cells(i, 9) = Plan8.Cells(i, 9)
    End If
    End If
    Next i
    
    Range("A8").Select
      Range(Selection, Selection.End(xlDown)).Select
      Range(Selection, Selection.End(xlDown)).Select
      Selection.ClearContents
      Range("B7").Select
      Selection.End(xlDown).Select
      Selection.End(xlDown).Select
      Selection.Offset(0, -1).Range("A1").Activate
      ActiveCell.FormulaR1C1 = "x"
      ActiveCell.Select
      Selection.Copy
      Range(Selection, Selection.End(xlUp)).Select
      ActiveSheet.Paste
      Application.CutCopyMode = False
      
    For A = 7 To Range("A1")
    If Range("B" & A).Value = "" Then
    Range("B" & A).Select
    Selection.EntireRow.Hidden = True
    Else
    Range("B" & A).Select
    Selection.EntireRow.Hidden = False
    End If
    Next A
    
    
    End Sub
    
    Pessoal, consegui resolver meu problema com o código acima..
    Estou postando caso alguém precise.
    Caio muitissimo obrigado pela atenção.
    A todos um forte abraço e um ótimo dia
    • Marcado como Resposta Allvinho quarta-feira, 16 de março de 2011 14:01
    quarta-feira, 16 de março de 2011 14:00

Todas as Respostas

  • Você já tentou escrever algum código? Poste aqui.
    Felipe Costa Gualberto - http://www.ambienteoffice.com.br
    terça-feira, 15 de março de 2011 11:34
  • Existem varias formas de fazermos isso:

    uma é utilizando as funções de banco de dados do excel BDCONTAR, BDSOMAR, ...

    outra formar, com as famosas SOMASES, CONTSES,...

    ou entao podemos trazer essas informações ja formatadas do banco de dados, ai utilizariamos as funções T-SQL:

    SUM(), AVG(),COUNT(),...  junto com a clausula BETWEEN

    tente detalhar um pouco mais o seu cenrio para podermos ajudá-lo


    Caio Vitullo
    terça-feira, 15 de março de 2011 12:42
  • Eu tentei assim.

    Sub Filtro()

    For i = 1 to 10000

    If Cells(i,4) = Cells(i,2) then

    cells(i,8)=cells(i,3)

    end if

    next i

     

    Só que não da nada.. como eu disse acima.. tipo.. se eu uso o procv, ele me retorna somente uma um valor quando se tem várias datas..

    E eu não queria usar o auto filtro..

     

    Muito obrigado pela atenção

     

    terça-feira, 15 de março de 2011 12:51
  • Caio muito obrigado pela atenção, mais na realidade eu não queria somar..

    Iamgine a seguinte situação:

      A B C D
    1 Data Descrição Valor Status
    2 18/fev Exemplo 1  R$   15,00 Ok
    3 18/fev Exemplo 2  R$   20,00 Ok
    4 18/fev Exemplo 3  R$   35,00 Falta
    5 19/fev Exemplo 1  R$   48,00 Falta
    6 19/fev Exemplo 2  R$   46,00 Ok
    7 20/fev Exemplo 3  R$   12,00 Ok
    8 21/fev Exemplo 2  R$   32,00 Falta
    9 23/fev Exemplo 2  R$   15,00 Falta
    10 24/fev Exemplo 1  R$   84,00 Ok
    11 24/fev Exemplo 2  R$   12,00 Ok

    Isso tudo em Plan1.

    Agora imagine em Plan2, na célula A1 eu digitaria uma data inicial, exemplo.: 18/fev

    E na célula A2 eu digitaria uma data final, exemplo.: 23/fev.

     

    Ai eu gostaria que ele buscasse esse intervalo de células do meu banco de Dados (Plan1) e me retornasse na Plan2.

    O Problema é que como eu tenho repetições de datas.. se eu uso a função PROCV.. por exemplo para buscar dados do dia 18, ele me retorna somente a primeira linha, e eu gostaria que me retornasse tudo referente ao intervalo.


    De qualquer forma muito Obrigado pela atenção.

     

    Abraço e órimo dia

    terça-feira, 15 de março de 2011 13:51
  • Da uma olhada nas opções que lhe mandei de filtro avançado.

    bom, de qualquer forma, criei um codigo para voce:

    Sub filtrar()
    'Limpa a sheet2
    Sheets("Plan2").Cells.Clear
    
    'Coluna da Data inicio
    Dim colunaData1 As Integer
    colunaData1 = 1
    'Coluna Data Fim
    Dim colunaData2 As Integer
    colunaData2 = 2
    
    'Verifica a ultima celula da plan1
    Dim finalRow As Integer
    finalRow = Sheets("Plan1").Cells(Rows.Count, 1).End(xlUp).Row
    'Ultima Coluna
    Dim finalColumn As Integer
    finalColumn = Sheets("Plan1").Cells(4, Columns.Count).End(xlToLeft).Column
    
    'Ultima Linha Sh2
    Dim finalRow2 As Integer
    
    For n = 1 To finalRow
      If CDate(Cells(n, colunaData1)) >= CDate(Sheets("Plan1").Range("g1")) And CDate(Cells(n, colunaData2)) <= CDate(Sheets("Plan1").Range("g1")) Then
        finalRow2 = Sheets("Plan2").Cells(Rows.Count, 1).End(xlUp).Row
        'Copia
        For k = 1 To finalColumn
          Sheets("Plan2").Cells(n, k) = Sheets("Plan1").Cells(n, k)
        Next
      End If
    Next
    Sheets("Plan2").Select
    End Sub
    
    

    Caio Vitullo
    terça-feira, 15 de março de 2011 14:49
  • Caio boa noite meu amigo..

    Acho que faltou um pouco de experiência de minha parte, mais não estou conseguindo fazer a macro rodar..

    Teria como eu te mandar a planilha por e-mail.??

     

    Abraço, e desculpa pelo encomodo..

     

    Sds

    quarta-feira, 16 de março de 2011 00:49
  • Sem problemas,

    coloque a planilha em algum site de compartilhamento de arquivos e me manda a url para eu baixar.

     


    Caio Vitullo
    quarta-feira, 16 de março de 2011 00:59
  • Caio.. vamos ver se deu certo..

     

    http://www.4shared.com/file/JautzHro/Horas_Extras_Beneficiamento.html

     

    Se quiser me add no msn.. eu te explico melhor..

    alvinho077@hotmail.com

     

    Abraço.

     

     

    quarta-feira, 16 de março de 2011 01:35
  • Ok, recebi, mas ela esta travada com senha.
    manda uma destravada por favor.
    Caio Vitullo
    quarta-feira, 16 de março de 2011 01:44
  • http://www.4shared.com/file/8y0aE7SV/Horas_Extras_Beneficiamento.html

     

    Ta ai o link.. desprotegi a planilha e o VBA, qualquer coisa a senha é ben2011

     

    Abraço

    quarta-feira, 16 de março de 2011 02:11
  • Sub Pesquisar()
      
    Cells.Select
    Selection.EntireRow.Hidden = False
    
    'Limpa a Planilha
    Range("B7:I10003").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.ClearContents
    
    
    For i = 7 To Plan8.Cells(1, 1)
    If Plan8.Cells(i, 2) = Plan10.Cells(1, 4) Then
    Plan10.Cells(i, 2) = Plan8.Cells(i, 2)
    Plan10.Cells(i, 3) = Plan8.Cells(i, 3)
    Plan10.Cells(i, 4) = Plan8.Cells(i, 4)
    Plan10.Cells(i, 5) = Plan8.Cells(i, 5)
    Plan10.Cells(i, 6) = Plan8.Cells(i, 6)
    Plan10.Cells(i, 7) = Plan8.Cells(i, 7)
    Plan10.Cells(i, 8) = Plan8.Cells(i, 8)
    Plan10.Cells(i, 9) = Plan8.Cells(i, 9)
    Else
    If Plan8.Cells(i, 2) >= Plan10.Cells(1, 4) And Plan8.Cells(i, 2) <= Plan10.Cells(2, 4) Then
    Plan10.Cells(i, 2) = Plan8.Cells(i, 2)
    Plan10.Cells(i, 3) = Plan8.Cells(i, 3)
    Plan10.Cells(i, 4) = Plan8.Cells(i, 4)
    Plan10.Cells(i, 5) = Plan8.Cells(i, 5)
    Plan10.Cells(i, 6) = Plan8.Cells(i, 6)
    Plan10.Cells(i, 7) = Plan8.Cells(i, 7)
    Plan10.Cells(i, 8) = Plan8.Cells(i, 8)
    Plan10.Cells(i, 9) = Plan8.Cells(i, 9)
    End If
    End If
    Next i
    
    Range("A8").Select
      Range(Selection, Selection.End(xlDown)).Select
      Range(Selection, Selection.End(xlDown)).Select
      Selection.ClearContents
      Range("B7").Select
      Selection.End(xlDown).Select
      Selection.End(xlDown).Select
      Selection.Offset(0, -1).Range("A1").Activate
      ActiveCell.FormulaR1C1 = "x"
      ActiveCell.Select
      Selection.Copy
      Range(Selection, Selection.End(xlUp)).Select
      ActiveSheet.Paste
      Application.CutCopyMode = False
      
    For A = 7 To Range("A1")
    If Range("B" & A).Value = "" Then
    Range("B" & A).Select
    Selection.EntireRow.Hidden = True
    Else
    Range("B" & A).Select
    Selection.EntireRow.Hidden = False
    End If
    Next A
    
    
    End Sub
    
    Pessoal, consegui resolver meu problema com o código acima..
    Estou postando caso alguém precise.
    Caio muitissimo obrigado pela atenção.
    A todos um forte abraço e um ótimo dia
    • Marcado como Resposta Allvinho quarta-feira, 16 de março de 2011 14:01
    quarta-feira, 16 de março de 2011 14:00