返回组中的最大值

我正在尝试索引并返回与给定产品的最大销售付款对应的收益价值。

以下电子表格是我正在处理的工作表的一个非常简化的版本。

例

以产品2为例。产品2已经分成两批销售(产品的40%,另外60%的产品)。 我需要在D栏input每个产品最大销售额的收益价值。 因此,对于产品2,60%的销售档次是最大的销售档次,相应的收益价值将是40。

我曾尝试使用多个公式,包括RANKCOUNTIFINDEX(MATCH()) ,似乎INDEX(MATCH())如何做到这一点。

我的第一个想法是有一个帮助者列的公式的东西沿线

COUNTIFS($A$2:$A$11,A2,RANK(B2,$B$2:$B$11),)

然后我可以很容易地在下一列中用一个简单的IF函数返回我需要的值。

但显然这个function是无稽之谈,缺less一个术语,不起作用。

有没有人有任何想法?

这是一个办法。 这是一个数组公式,所以它必须按Ctrl + Shift + Enter进入

D2中input的公式然后复制下来。

 =INDEX($C$2:$C$11,MATCH(LARGE(IF($A$2:$A$11=A2,$B$2:$B$11,0),1),IF($A$2:$A$11=A2,$B$2:$B$11,0),0)) 

另一个select与帮手列

如果它的最大行,助手(在D2)返回0

 =COUNTIFS($A$2:$A$11,A2,$B$2:$B$11,">"&B2) 

解决scheme(E2)

 =AVERAGEIFS($C$2:$C$11,$A$2:$A$11,A2,$D$2:$D$11,0) 

使用averageifs的情况下,有两个相同的高值将返回平均值,否则它只是一个单元格的平均值。

将以下公式复制到单元格D2

 =MAX(OFFSET($C$1,MATCH(A1,A:A,0)-1,0,COUNTIF(A:A,A1),1)) 

然后复制D2然后粘贴

以上公式只适用于A列数字sorting

如果你对VBA感到满意,你可以写一个函数来为你做这个工作。 如果将以下代码放入模块中,则可以指定要分组的一系列值(在您的情况下为产品编号列表),您要过滤的标准(您要评估的产品编号),和你想要比较的值。 通过将每个范围保存到一个数组中,您可以遍历值列表并查找具有您指定的产品编号的最大值。

 Function Maxif(GroupRange As Range, Criteria As Variant, ValuesRange As Range) Dim i As Integer Dim Groupings As Variant Dim Value As Variant Groupings = Array() Values = Array() Groupings = GroupRange Values = ValuesRange Maxif = "#N/A" For i = 1 To UBound(Groupings, 1) If Maxif = "#N/A" Then If Groupings(i, 1) = Criteria Then Maxif = Values(i, 1) Else: End If Else: If (Groupings(i, 1) = Criteria And Values(i, 1) > Maxif) Then Maxif = Values(i, 1) Else: End If End If Next i End Function 

它遵循与countif,sumif等相同的逻辑。所以Maxif(A2:A11,A3,C2:C11)将返回60%,即产品2的最大值。

从那里,如果你需要find收益,你可以在列A之前插入一个列,连接产品和该列中销售的百分比,然后对与销售的最大百分比连接的产品进行查找,以find相应的收益。

例如:

在这里输入图像说明

然后你的汇总表如下所示:

在这里输入图像说明

无论您如何对工作表进行sorting,这都可以工作。