多标准小功能优秀

时间:2016-08-22 15:39:11

标签: excel excel-formula aggregate

我很难使用具有多个条件的小函数在excel中查找至少10个值,并且还排除了零。

  • 我有4列,人物,日期,时间和天气。
  • 我想要一个人考虑所有日期的最少时间,天气不应该下雨。

我使用过这个公式:

=small(if(and(person="a",hours,"<>0",weather,"<>rainy"),hours),no)

其中no代表1-5的数字。

2 个答案:

答案 0 :(得分:3)

已经提供了一种数组公式解决方案;另一个标准公式(即非CSE)方法可以是较新的AGGREGATE¹ function,它提供一层循环处理而无需用CSE完成。

AGGREGATE可以选择忽略错误;通过强制将任何不符合要求的值组合转换为#DIV/0!状态,将忽略这些值。当所有三个条件匹配时,分母将 1 ,任何数字除以1都不会改变。

=AGGREGATE(15, 6, C$2:C$13/((A$2:A$13=G$4)*(D$2:D$13=H$4)*(C$2:C$13<>0)), ROW(1:1))

填写第二个,然后是第三个,等等。如果您希望向右填充,请将ROW(1:1)更改为COLUMN(A:A)以横向获得 k 增量。请记住使用 $ “锚定”范围和条件参考的列。

aggregate_three_column_match_2

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。

答案 1 :(得分:2)

数组公式不喜欢ANDOR,所以使用伪代码将它们相乘,将它们减少到它们的布尔值:

=small(if((person="a")*(hours <> 0)*(weather<>"rainy"),hours),no)

请记住,这是一个数组公式,必须在退出编辑模式时使用Ctrl-Shift-Enter而不是Enter确认。

因此,如果人员是A列,小时栏B和天气栏C,请将其放在您想要答案的第一个单元格中:

=SMALL(IF((A1:A100 = "a")*(B1:B100 <> 0) * (C1:C100 <> "rainy"),B1:B100),Row(1:1))

使用Ctrl-Shift-Enter确认并复制所需的结果数。行(1:1)将在向下复制时从1到2迭代到3。