一天所需的最小/最大利润

我有下面的数据

Name Code Code Date Profit Name Maximum Minimum A 2400 1/11/2016 38500 A nil 2100 A 2300 1/14/2016 26750 B aaa 1260 A 2200 1/14/2016 21250 C nil 95 A 2300 1/11/2016 19250 A 2250 1/14/2016 14000 A 2100 1/14/2016 11750 B 1220 1/15/2016 750 B 1280 1/11/2016 4875 B 1360 1/12/2016 4875 B 1380 1/11/2016 4500 B bbb 1/11/2016 3375 B 1280 1/12/2016 2250 B 1340 1/11/2016 2250 B 1340 1/14/2016 2250 B aaa 1/15/2016 50000 B 1260 1/15/2016 0 C 85 1/14/2016 324000 C 85 1/13/2016 282000 C 85 1/11/2016 246000 C 95 1/15/2016 200 C 90 1/12/2016 156000 C 90 1/14/2016 138000 

在上面我想写一个公式,例如命名为“A” – search最大利润,如果这个利润碰巧是date中的最大值,那么给出第二列中提到的代码。 例如,对于名称“A”,最大利润是38500,发生在2016年1月11日,而不是date列中名称为“A”的最新date,因此输出为零。 同样,我想findB的最小值,最低利润是0(零),这恰好是在date的最新date,所以它打印1260.此外,数据每天都在添加,代码列可能是一个数字或文字。

原始的AGGREGATE函数使用它的LARGE和SMALL子函数直接返回真实的数字。 如果您需要返回基于文本的结果,则AGGREGATE必须返回匹配值的行号并将其传递给INDEX函数 。

以H2为标准配方,

 =IFERROR(INDEX(B:B, AGGREGATE(15, 6, ROW(B$2:INDEX(B:B, MATCH(1E+99,D:D )))/((A$2:INDEX(A:A, MATCH(1E+99,D:D ))=G2)* (C$2:INDEX(C:C, MATCH(1E+99,D:D ))=AGGREGATE(14, 6, C$2:INDEX(C:C, MATCH(1E+99,D:D ))/(A$2:INDEX(A:A, MATCH(1E+99,D:D ))=G2), 1))* (D$2:INDEX(C:C, MATCH(1E+99,D:D ))=AGGREGATE(14, 6, D$2:INDEX(D:D, MATCH(1E+99,D:D ))/(A$2:INDEX(A:A, MATCH(1E+99,D:D ))=G2), 1))), 1)) , "nil") 

根据需要填写。

aggregate_max_min_stock_codes