我在 A、B 和 C 列中有值:
1 - 1 - 2
1 - 2 - 3
2 - 2 - 4
3 - 4 - 1
2 - 3 - 5
和另一列(假设这是在 E 列):
1
1
2
3
4
注意:所有列都从第 1 行开始。
我想搜索在 A 列范围内包含 E1 的值并在 B 列范围内包含 E2 的值的行。如果该行包含这两个值,则返回 C 列中的值
我在 F 列创建了以下函数:
=IF(AND(E1=$A$1:$A$4,E2=$B$1:$B$4),$C$1:$C$4)
只有当符合我的标准的值位于同一行时,它才有效,否则我会得到 false。举例说明问题:
EFABC
1 2 ---------------------> 1 1 2 :因为 E1 = A1 且 E2 = B1 - F1 将 = 2
1 3 ---------------------> 1 2 3 :因为 E2 = A2 且 E3 = B2 - F2 将为 = 3 2 假 -----------------> 2 2 4 :因为 E3 = A3 但 E4 != B3 - F3 为假(应该是 5)
有什么建议吗?
答案1
尝试一下:
=INDEX(C:C,MATCH(1,(E1=A:A)*(E2=B:B),0))
不幸的是我不能承担这份荣誉,因为它来自exceljet.net 上的这篇精彩文章
(最)相关的部分,包含一些拼写错误更正:
此公式的工作原理:
通常情况下,INDEX MATCH 公式配置为 MATCH 设置为查看单列范围并根据给定条件提供匹配项。如果不在辅助列或公式本身中连接值,则无法提供多个条件。
此公式通过使用布尔逻辑创建一个由 1 和 0 组成的数组来表示符合所有 3 个条件的行,然后使用 MATCH 来匹配找到的第一个 1,从而解决了这个限制。
临时的 1 和 0 数组基于以下代码片段:
(H5=B5:B11)*(H6=C5:C11)*(H7=D5:D11)
在这里,我们将 H5 中的商品与所有商品进行比较,将 H6 中的尺寸与所有尺寸进行比较,将 H7 中的颜色与所有颜色进行比较。初始结果如下所示:
{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE}*{FALSE;FALSE;TRUE;FALSE;FALSE;TRUE;FALSE}*{TRUE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}
乘法运算将 TRUE FALSE 值转换为 1 和 0:
{1;1;1;0;0;0;1}*{0;0;1;0;0;1;0}*{1;0;1;0;0;0;1}
最终结果如下:
{0;0;1;0;0;0;0}
作为查找数组进入 MATCH:
MATCH(1,{0;0;1;0;0;0;0})
MATCH 返回 3,整个公式归结为标准 INDEX MATCH 公式
=INDEX(E5:E11,3)
最终结果是17.00美元。
答案2
您可以使用以下数组公式:
{=IFERROR(INDEX($C$1:$C$5,SMALL(IF(($A$1:$A$5=E1)*($B$1:$B$5=E2),ROW($1:$5)-ROW($1:$1)),ROW($A1))),"")}
注意:
- 用 完成公式
Ctrl+Shift+Enter
。 - 根据需要调整公式中的单元格引用。