Excel:SMALL()、IF()和ROW()使用多个条件查找值的行号-and()不起作用

Excel:SMALL()、IF()和ROW()使用多个条件查找值的行号-and()不起作用,excel,if-statement,excel-formula,excel-2016,Excel,If Statement,Excel Formula,Excel 2016,我有一个名为Purchases的参考电子表格,看起来与此类似: A B C D 1 Ord_ID Supplier PO_Date Receipt_Quantity 2 PO101 Aa 11/1/2017 5 3 PO102 Bb 12/1/2017

我有一个名为
Purchases
的参考电子表格,看起来与此类似:

        A           B              C              D
1       Ord_ID      Supplier       PO_Date        Receipt_Quantity
2       PO101       Aa             11/1/2017      5
3       PO102       Bb             12/1/2017      12
4       PO103       Cc             12/15/2017     100
5       PO104       Bb             1/15/2018      8
6       PO105       Dd             2/1/2018       30
7       PO106       Bb             3/1/2018       15
8       PO107       Bb             4/1/2018       10
...
我有一张名为
Supplier Bb Data
的单独表格,它应该返回供应商Bb的
采购
数据的行号。公式如下所示,位于单元格
A10
A11
A12
等中:

=SMALL(IF('Purchases'!$B:$B=$A$1, ROW('Purchases'!$B:$B)), ROW(1:1))
=SMALL(IF('Purchases'!$B:$B=$A$1, ROW('Purchases'!$B:$B)), ROW(2:2))
=SMALL(IF('Purchases'!$B:$B=$A$1, ROW('Purchases'!$B:$B)), ROW(3:3))
...
供应商Bb数据中的
A1
包含要查找的值“Bb”

这个公式有效;它将返回
采购
中包含供应商Bb采购订单的行号。(
3
5
7
8
等)


但是,我希望能够返回更具体的数据:其中
Supplier=Bb
PO_Date>=2018年1月1日
,以及
PO_Date=$A$2,'购买$C$CAND函数本身执行循环(数组样式)计算。随后,AND或or函数不能很好地与数组样式(CSE)公式中的其他函数配合使用。将条件堆叠在嵌套的IF或use AGGREGATE中

'array style with CSE
=SMALL(IF(Purchases!$B:$B=$A$1, IF(Purchases!$C:$C>=$A$2, IF(Purchases!$C:$C<=$A$3, ROW($B:$B)))), ROW(1:1))

'standard style without CSE
=AGGREGATE(15, 7, ROW(B:B)/((Purchases!B:B=A$1)*(Purchases!C:C>=A$2)*(Purchases!C:C<=A$3)), ROW(1:1))

或者,您可以将SMALL+IF与SUMPRODUCT功能结合使用(Ctrl+Shift+Enter):

=IFERROR(小型产品(如果((购买)$B$1:$B$8=$A$1)*(购买)$C$1:$C$8>=$A$2)*(购买)$C$1:$C$8
'array style with CSE
=SMALL(IF(Purchases!$B:$B=$A$1, IF(Purchases!$C:$C>=$A$2, IF(Purchases!$C:$C<=$A$3, ROW($B:$B)))), ROW(1:1))

'standard style without CSE
=AGGREGATE(15, 7, ROW(B:B)/((Purchases!B:B=A$1)*(Purchases!C:C>=A$2)*(Purchases!C:C<=A$3)), ROW(1:1))
=AGGREGATE(15, 7, ROW($1:$999)/((Purchases!B$1:B$999=A$1)*(Purchases!C$1:C$999>=A$2)*(Purchases!C$1:C$999<=A$3)), ROW(1:1))
=IFERROR(SUMPRODUCT(SMALL(IF((Purchases!$B$1:$B$8=$A$1)*(Purchases!$C$1:$C$8>=$A$2)*(Purchases!$C$1:$C$8<=$A$3)=0,"",(ROW(Purchases!$B$1:$B$8))),ROW(1:1))),"")