Notifications
Clear all

Maior Data do Pedido

10 Posts
3 Usuários
0 Reactions
1,685 Visualizações
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá Pessoal!

Estou tentando encontrar a Maior data de pedido que existe para determinado produto, desconsiderando os pedidos que foram cancelados.

Tenho a coluna I com o códigos dos produtos, e a J a data que o pedido foi feito, Caso seja Cancelado é informado na Coluna N.

Gostaria de colocar na coluna R a maior data/mais recente que existe para aquele produto, desconsiderando os pedido cancelado.

Fiz um antes e depois para facilitar, caso alguém possa ajudar.

Abs

 
Postado : 14/05/2014 5:08 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Mas vc quer isso com VBA, ou pode ser com fórmula?

Segue uma fórmula matricial que resolve:

Em R5 faça:

=SE(N5="CANCELADO";N5;MÁXIMO(SE((I5:I23=I5)*(N5:N23<>"CANCELADO")=1;J5:J23)))

Ctrl + Shift + Enter

E arraste para baixo.

Abs

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 14/05/2014 5:25 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Matricial em R5

{=SE(N5="CANCELADO";"CANCELADO";MÁXIMO(SE(I5=$I$5:$I$23;1;0)*SE($N$5:$N$23<>"CANCELADO";1;0)*$J$5:$J$23))}

Arraste para baixo.

Abs,

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

 
Postado : 14/05/2014 5:29 pm
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá gtsalikis!

Fiz o teste e não funcionou,
Exemplo.:
Se filtrar o código 91M5M9683 verá que tem apenas duas linhas e as seguintes datas: 01/05/2013 e 01/09/2013, então para este produto a maior data é 01/09/2013 e utilizando a formula sugerida ele está trazendo a data 07/04/2014.

------------------------------------------------------------------------------------------------------------------------------------------

Olá Mandrix
Fiz o teste e não funcionou, ele está trazendo várias datas para o mesmo produto.
Exemplo.:
Se filtrar o código 91M5M9683 verá que tem apenas duas linhas e as seguintes datas: 01/05/2013 e 01/09/2013, então para este produto a maior data é 01/09/2013 e utilizando a formula sugerida ele está trazendo duas datas 01/05/2013 e 01/09/2013, o qual deveria ser somente a maior 01/09/2013.

--------------------------------------

Abs

 
Postado : 14/05/2014 7:26 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Matricial em R5
Ctrl + Shift + Enter

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

 
Postado : 14/05/2014 7:31 pm
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Olá Mandrix!

Sim, funcionou.
Desculpe, nunca tinha usado formula matricial, nem sabia como fazer.

Você saberia me dizer como fazer está operação VB?

Vlw

 
Postado : 14/05/2014 7:53 pm
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Desculpe gtsalikis!

Sua fórmula realmente funciona, eu que não sabia aplicar formula matricial.

Saberia me dizer como fazer esta aplicação em VB.

Abs

 
Postado : 14/05/2014 8:02 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Amigo, eu não sei como levar uma fórmula matricial para o VBA, mas creio q posso fazer um loop que traga o mesmo resultado.

Vou ver pra vc e depois posto aqui.

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 14/05/2014 8:17 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

Veja este código:

Option Explicit

Sub maior_data_GT()

Application.ScreenUpdating = False

Dim PL      As Integer 'Primeira Linha
Dim UL      As Integer 'Última Linha
Dim i       As Integer
Dim j       As Integer
Dim Cod     As String
Dim Data    As Date

PL = Cells(1, "I").End(xlDown).Row + 1
UL = Cells(Rows.Count, "I").End(xlUp).Row

For i = PL To UL
    If Cells(i, "N").Value2 = "CANCELADO" Then
        Cells(i, "R").Value2 = "CANCELADO"
        GoTo PROXIMO
    End If
    Cod = Cells(i, "I").Value2
    For j = PL To UL
        If Cells(j, "I").Value2 = Cod And Cells(j, "N") <> "CANCELADO" Then
            If CDate(Cells(j, "J")) > Data Then Data = CDate(Cells(j, "J"))
        End If
    Next j
    Cells(i, "R").Value2 = Data
    Data = 0
PROXIMO:
Next i

Application.ScreenUpdating = True

End Sub

Lembre-se de AGRADECER aos que te ajudaram, e de marcar o tópico como [Resolvido]
Gente que cuida de gente.

Gilmar

 
Postado : 14/05/2014 9:07 pm
(@luislapa)
Posts: 49
Eminent Member
Topic starter
 

Muito Obrigado!

Ficou ótimo.

 
Postado : 15/05/2014 8:38 pm