Notifications
Clear all

Procura por período e contagem

16 Posts
4 Usuários
0 Reactions
3,160 Visualizações
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Olá.
Na planilha em anexo tem a coluna A (data), coluna B (produto), coluna C (qtd).
Adaptei o seguinte:
Numa célula, o usuario digita o produto desejado. O VBA procura as ocorrencias do produto na coluna B
e soma numa variável a qtd total. Dessa forma se encontrar duas ocorrencias do produto, ele soma as duas
ocorrencias na variável e exibe resultado na celula.

Gostaria de uma ajuda para implementar contagem por data... exemplo: De 01/07/2016 até 31/07/2016 a qtd
é "X"... Dessa forma consigo dinamicamente fazer uma contagem da qtd em um determinado período e gerar algumas estatísticas.

Poderiam me ajudar ?

 
Postado : 01/08/2016 10:34 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Experimente

Function SomaPorPeríodo()
 Dim i As Date, f As Date, c As Range, v As Double
  Application.Volatile
  For Each c In Range("A2:A" & Cells(Rows.Count, 1).End(3).Row)
   i = [F2]: f = [F3]
   If c.Value >= i And c.Value <= f Then v = v + c.Offset(, 2)
  Next c
 SomaPorPeríodo = v
End Function

em qualquer célula vazia cole

 =SomaPorPeríodo()

Osvaldo

 
Postado : 01/08/2016 12:10 pm
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Sim Sim. Mas é quase isso.
Digito na F5 o produto.
Ele soma as ocorrências do produto na coluna B. Da forma como está, parece que está somando todo o período.
"Encontrando o código em F5, ele soma. Se não encontra, não soma" (Isso dentro do período especificado)
Entendeu ?

 
Postado : 01/08/2016 12:29 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

Gostaria de uma ajuda para implementar contagem por data...

Não considerei o Produto pois entendi erradamente que você queria somente o critério data, conforme o seu comentário acima.

Experimente a Função abaixo que considera o Produto inserido em 'F5' além do intervalo de datas em 'F2:F3'.

Function SomaPerProd()
 Dim i As Date, f As Date, c As Range, v As Double, n As Double
  Application.Volatile
  For Each c In Range("A2:A" & Cells(Rows.Count, 1).End(3).Row)
   i = [F2]: f = [F3]: n = [F5]
   If c.Value >= i And c.Value <= f And c.Offset(, 1).Value = n Then v = v + c.Offset(, 2)
  Next c
SomaPerProd = v
End Function

na célula

=SomaPerProd()

Osvaldo

 
Postado : 01/08/2016 1:50 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde rafnakb,

É possível resolver o seu caso sem VBA, usando a função SOMASES:

=SOMASES(C:C;B:B;F6;A:A;">="&F2;A:A;"<="&F3)

att,

 
Postado : 01/08/2016 5:12 pm
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Obrigado, Osvaldomp
Deu certo aqui.. Estou concluindo esta etapa..

Obrigado também, brunoxro... Contudo, parece que por VBA consigo analisar melhor do que por fórmula pq tenho
uma quantidade imensa de dados e com mais colunas.. Parece que por fórmula demora mais que por VBA...
Mesmo assim, obrigado...

 
Postado : 02/08/2016 6:51 am
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Como estou tentando aprender VBA por conta, tenho uma série de dúvidas...
No código abaixo, como faço para setar em qual planilha analisar ?
1) Suponha que tenho Plan1, Plan2, Plan3, Plan4...
2) Preciso analisar na Plan2 (Os dados), porém estou na célula da Plan3 (Nela que digito datas e produtos).
??
Obrigado

Function SomaPerProd()
Dim i As Date, f As Date, c As Range, v As Double, n As Double
  Application.Volatile
  For Each c In Range("A2:A" & Cells(Rows.Count, 1).End(3).Row)
   i = [F2]: f = [F3]: n = [F5]
   If c.Value >= i And c.Value <= f And c.Offset(, 1).Value = n Then v = v + c.Offset(, 2)
  Next c
SomaPerProd = v
End Function
 
Postado : 02/08/2016 7:02 am
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Como estou tentando aprender VBA por conta, tenho uma série de dúvidas...
No código abaixo, como faço para setar em qual planilha analisar ?
1) Suponha que tenho Plan1, Plan2, Plan3, Plan4...
2) Preciso analisar na Plan2 (Os dados), porém estou na célula da Plan3 (Nela que digito datas e produtos).
??
Obrigado

 
Postado : 02/08/2016 12:09 pm
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Assim:

 
Postado : 02/08/2016 12:14 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Para utilizar em outra aba e somar da aba Plan1 utilize esta :

Function SomaPerProdPlan1()
    Dim i As Date, f As Date, c As Range, v As Double, n As String
    
    Application.Volatile
    
    For Each c In Plan1.Range("A2:A" & Plan1.Cells(Rows.Count, 1).End(3).Row)
   
        i = [F2]: f = [F3]: n = [F5]
   
        If c.Value >= i And c.Value <= f And c.Offset(, 1).Value = n Then v = v + c.Offset(, 2)
  
    Next c
  
    SomaPerProdPlan1 = v
    
End Function

[]s

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/08/2016 1:35 pm
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Poderia me dizer o que é aquele parâmetro 3 no final da linha dessa parte??

For Each c In Plan1.Range("A2:A" & Plan1.Cells(Rows.Count, 1).End(3).Row)

O End(3) ... O que significa o parâmetro 3 ?

 
Postado : 03/08/2016 10:30 am
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Conforme o código citado acima, consegui funcionar para uma planilha teste (A primeira anexada ali em cima).
Porém, não consigo realizar o mesmo procedimento com essa planilha anexada abaixo..

Onde estou errando ? Preciso realizar uma série de contagem, baseado na data...

 
Postado : 03/08/2016 12:48 pm
(@osvaldomp)
Posts: 857
Prominent Member
 

substitua esta linha

For Each c In Lançamentos.Range("A2:A" & Lançamentos.Cells(Rows.Count, 1).End(24).Row)

por esta

For Each c In Sheets("Lançamentos").Range("A2:A" & Sheets("Lançamentos").Cells(Rows.Count, 1).End(3).Row)

A Função atualmente retorna o valor 106.
Após ativar a planilha 'Resultados' e fazer alteração em alguma de suas células e em seguida retornar para a planilha onde está a Função você verá que o valor da Função mudou para 0 e só retornará 106 novamente após o Excel recalcular.
Para evitar isso, e manter sempre o valor correto, se for do seu interesse, substitua esta linha

i = [B3]: f = [B4]: n = [B1]

por esta

i = Sheets("Resultados").[B3]: f = Sheets("Resultados").[B4]: n = Sheets("Resultados").[B1]

Osvaldo

 
Postado : 03/08/2016 5:18 pm
(@rafnakb)
Posts: 44
Eminent Member
Topic starter
 

Entendi.. Obrigado...Ficou do jeito que me orientou...
Eu queria saber também o que o parâmetro "3" faz:

For Each c In Sheets("Lançamentos").Range("A2:A" & Sheets("Lançamentos").Cells(Rows.Count, 1).End(3).Row)

Esse "End(3)" .... ??

 
Postado : 03/08/2016 6:54 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Entendi.. Obrigado...Ficou do jeito que me orientou...
Eu queria saber também o que o parâmetro "3" faz:

For Each c In Sheets("Lançamentos").Range("A2:A" & Sheets("Lançamentos").Cells(Rows.Count, 1).End(3).Row)

Esse "End(3)" .... ??

O numero é a representação numerica dos parametros de Direção :

End(1) ou End (xlToLeft) - para a Esquerda
End(2) ou End (xlToRight) - para a Direita
End(3) ou End (xlUp) - Para cima
End(4) ou End (xlDown) - para Baixo

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 03/08/2016 7:23 pm
Página 1 / 2