Excel数组公式,用于根据多个条件查找最大值行

时间:2017-07-13 16:11:14

标签: excel vba excel-formula

Column: A        | B      | C      | D
Row 1:  Variable | Margin | Sales  | Index
Row 2:  banana   | 2      | 20     | 1
Row 3:  apple    | 5      | 10     | 2
Row 4:  apple    | 10     | 20     | 3
Row 5:  apple    | 10     | 10     | 4
Row 6:  banana   | 10     | 15     | 5
Row 7:  apple    | 10     | 15     | 6

"Variable" sits in column A, row 1.
"Fruit" refers to A2:A6
"Margin" refers to B2:B6
"Sales" refers to C2:C6
"Index" refers to D2:D6

问题:

从上表中,我想找到两个最大的"销售"当Fruit =" apple"和保证金> = 10.正确的答案是第3行和第6行的值。我尝试了以下方法但没有成功。

我试过了

=LARGE(IF(Fruit="apple",IF(Margin>=10,Sales)),{1,2}) + CSE 

然后返回20和15,但不返回行。

我试过了

=MATCH(LARGE(IF(Fruit="apple",IF(Margin>=10,sales)),{1,2}),Sales,0)+1

但是返回第2行和第6行,因为第一个匹配是来自" banana"不是" apple"。

我试过了

=INDEX(D2:D7,LARGE(IF(Fruit="apple",IF(Margin>=10,ROW(Sales)-ROW(INDEX(Sales,1,1))+1)),{1,2}),1)

但这会返回第7行和第5行(即"索引" 6和4),因为这些只是" apple"的第一次出现。从表格的底部开始。它们不是最大的值。

可以使用Excel公式完成,还是需要宏?如果是宏,我可以请求宏的帮助吗?谢谢!

1 个答案:

答案 0 :(得分:1)

使用此公式:

=INDEX(D:D,AGGREGATE(15,6,ROW($A$2:$A$7)/(($B$2:$B$7>=10)*($A$2:$A$7="apple")*($C$2:$C$7 = AGGREGATE(14,6,$C$2:$C$7/(($B$2:$B$7>=10)*($A$2:$A$7="apple")),F2))),1))

我把1和2分别放在F2和F3中找到第一个和第二个。

enter image description here

编辑#1

要处理重复项,我们需要添加(COUNTIF($G$1:G1,$D$2:$D$7) = 0)$G$1:G1需要在此公式的第一个展示位置正上方引用单元格。所以公式需要至少从第2行开始。

=INDEX(D:D,AGGREGATE(15,6,ROW($A$2:$A$7)/((COUNTIF($G$1:G1,$D$2:$D$7) = 0)*($B$2:$B$7>=10)*($A$2:$A$7="apple")*($C$2:$C$7 = AGGREGATE(14,6,$C$2:$C$7/(($B$2:$B$7>=10)*($A$2:$A$7="apple")),F2))),1))

enter image description here