我很难使用具有多个条件的小函数在excel中查找至少10个值,并且还排除了零。
我使用过这个公式:
=small(if(and(person="a",hours,"<>0",weather,"<>rainy"),hours),no)
其中no代表1-5的数字。
答案 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 增量。请记住使用 $ “锚定”范围和条件参考的列。
¹ Excel 2010引入了AGGREGATE function。早期版本不提供。
答案 1 :(得分:2)
数组公式不喜欢AND
或OR
,所以使用伪代码将它们相乘,将它们减少到它们的布尔值:
=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。