返回组中的最大值

时间:2016-06-01 15:17:47

标签: excel excel-formula rank

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

以下电子表格是我正在处理的表格的简化版本。

Example

以产品2为例。产品2以2个销售档次销售(一个产品占40%,产品占另外60%)。我需要在D栏中输入每种产品最大销售部分的收益值。因此,对于产品2,60%的销售部分是最大的销售部分,相应的收益值将是40。

我尝试过使用多个公式,包括RANKCOUNTIFINDEX(MATCH()),似乎无法解决如何做到这一点。

我的第一个想法是有一个辅助列,其中的公式类似于

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

然后我可以在下一栏中使用简单的IF函数轻松返回我需要的值。

但显然这个功能是无意义的,缺少一个术语而且不起作用。

有没有人有任何想法?

3 个答案:

答案 0 :(得分:1)

这是一种方法。这是一个数组公式,因此必须按 ctrl + shift + enter

输入

在D2中输入的公式然后被复制下来。

=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))

辅助列的另一个选项

helper(在D2中)如果是最大行

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

解决方案(E2)

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

如果有2个同样高的值,则使用averageifs将返回平均值,否则它只是1个单元格的平均值。

答案 1 :(得分:0)

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

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

然后复制D2然后粘贴

以上公式仅适用于列A编号已排序

答案 2 :(得分:0)

如果您对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的最大值。

从那里,如果你需要找到收益,你可以在A列之前插入一列,在该列中连接产品和%销售,然后在与max%sold连接的产品上执行vlookup以找到相应的前进。

E.g:

enter image description here

然后你的汇总表看起来像:

enter image description here

无论您如何对表单进行排序,这都会有效。