Notifications
Clear all

Pegar maior valor de um intervalo

11 Posts
3 Usuários
0 Reactions
1,957 Visualizações
(@dyego-vn)
Posts: 0
New Member
Topic starter
 

Preciso de um código para pegar o maior valor em um intervalo.

Por exemplo, tenho varios projetos com datas de previsão de chegada de materia prima, quero saber qual a maior data de cada projeto.
Na minha planilha tenho indicadores, onde ao selecionar o número do projeto ela me da as informações automaticamente, mas não estou conseguindo gerar essa data, só consigo da planilha inteira.

Envio em anexo um exemplo para que possam ter uma ideia do que estou querendo.

No exemplo não tem o Worksheet_change, mas isso eu já resolvi. Só quero conseguir pegar a maior data, no intervalo dos projetos, e que essa data apareça no campo indicado. Podem salvar essa ? :)

Obrigado desde já !

 
Postado : 25/02/2016 11:07 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

- atualize sua validação para mostrar exatamente o nome do projeto, Senão, nunca vai acontecer a comparação adequada. Não exiba 38, exiba "Projeto 38"
- na célula i5 digite a seguinte fórmula, finalizando-a com Ctrl+Shift+Enter *(pq é matricial)

=MAIOR((A5:A27=I3)*1*C5:C27;1)

não esquecer de usar Ctrl+Shift+Enter

 
Postado : 25/02/2016 12:31 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite dyego.vn

Uma alternativa que não é necessário alterar a tua validação de dados e não é matricial.

=SOMARPRODUTO(MÁXIMO((A5:A27=H3&" "&I3)*(C5:C27)))

Tanto a minha fórmula, como aquela postada na resposta anterior, só irão funcionar, se não tiver aquelas datas em branco, pois a fórmula procura até a próxima linha vazia.

Se foi útil, clique na mãozinha.

Dê retorno.

[]s

 
Postado : 25/02/2016 6:02 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia, vou concordar com o Patropi que há algumas formas de escrever a fórmula onde será necessário ou não alterar a validação.
Minha sugestão baseado na minha experiência, é, não dependa de todo projeto começar com a palavra "Projeto".

Ao melhorar sua validação, vc acabará tendo mais maleabilidade nos nomes dos projetos.
MAS, claro, é uma opção sua !

Se quiser a user a fórmula do Patropi, considerando mudar a validação, ficaria assim:

=SOMARPRODUTO(MÁXIMO((A5:A27=I3)*(C5:C27)))

Fica a seu critério!

Abs,
FF

 
Postado : 26/02/2016 5:08 am
(@dyego-vn)
Posts: 0
New Member
Topic starter
 

Bom dia,
obrigado pelo tempo de vocês.
Não sei se fui muito claro, eu preciso que seja VBA, e esse é só um exemplo. Minha planilha tem 6 abas, sendo 4 relatorios com mais de 20 mil linhas.
A primeira aba são meus rsultados, e a segunda indicadores. Um dos indicadores é essa data. Se eu colocar função, o restante das macros ficam lentas, por isso preciso que seja em VBA.
Quero uma forma de, ao selecionar o projeto, a macro define um intervalo de i até j (sendo i a linha que a primeira vez que o tal projeto aparece, e j a ultima vez, os projetos estão em linhas sequenciais), e pegue o maior valor desse intervalo. Não sei se expliquei direito, caso não tenha ficado claro avisem que tento de novo rs

Obrigado mais uma vez!

 
Postado : 26/02/2016 6:34 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Experimente:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If Target.Address = "$I$3" And Target.Value <> "" Then [I5] = Evaluate("=MAX(IF(A5:A27=""Projeto ""&I3,C5:C27))")
End Sub
 
Postado : 26/02/2016 7:00 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Poste um modelo simplificado com o cenário completo.

 
Postado : 26/02/2016 8:54 am
(@dyego-vn)
Posts: 0
New Member
Topic starter
 

Segue um exemplo.

Quero que, ao selecionar o projeto, ele retorne a maior data do projeto selecionado.
Lembrando que são mais de 100 projetos com cerca de 2500 linhas

Obrigado desde já!

 
Postado : 01/03/2016 8:09 am
(@osvaldomp)
Posts: 857
Prominent Member
 
Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
 If Target.Address = "$H$4" Then [K4] = Evaluate("=MAX(IF(A5:A5000=" & Target.Value & ",C5:C5000))")
End Sub
 
Postado : 01/03/2016 8:58 am
(@dyego-vn)
Posts: 0
New Member
Topic starter
 

Funcionou! Muito obrigado !

Precisava de outra coisa, que abaixo da data aparecesse o nome do item, como faria isso ?

 
Postado : 03/03/2016 9:53 am
(@osvaldomp)
Posts: 857
Prominent Member
 

Precisava de outra coisa, que abaixo da data aparecesse o nome do item, como faria isso ?

Experimente:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Count > 1 Then Exit Sub
  If Target.Address = "$H$4" Then
   [K4] = Evaluate("=MAX(IF(A5:A5000=" & Target.Value & ",C5:C5000))")
   [K5] = Evaluate("=LOOKUP(2,1/((A5:A5000=H4)*(C5:C5000=K4)),B5:B5000)")
  End If
End Sub
 
Postado : 03/03/2016 2:50 pm