Return 一组中的最大值

Return largest value in a group

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

下面的传播sheet是我正在处理的sheet的一个非常简化的版本。

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

我已经尝试使用多个公式,包括 RANKCOUNTIFINDEX(MATCH()),但似乎无法弄清楚如何去做。

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

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

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

但是显然这个函数是废话,少了一个词,不起作用

有没有人有什么想法?

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

输入

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

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

辅助列的另一个选项

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

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

解决方案(E2)

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

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

复制下面的公式到D2单元格

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

然后复制D2再粘贴

以上公式仅在 A 列数字已排序时有效

如果您觉得 table 使用 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) 将 return 60%,乘积 2 的最大值。

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

例如:

然后您的摘要 table 将如下所示:

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