如何根据条件控制Excel INDEX函数中的列数?

问题描述 投票:0回答:2

我有一张这样的桌子:

A B C D
苹果 香蕉 0 0
0 0
橙色 0 1
汽车 柠檬 1 1
0 0
0 0
山羊 1 0
红色 1 1
蓝色 绿色 0 0
0 0
花园 0 0

使用数组公式,我想列出 C 和 D 均为 0 的每一行。如果 A 有一个值,我想使用它,但如果 A 为空,我想使用 B。

我已经成功用谷歌搜索到了这个:

{=IFERROR(INDEX($A$1:$B$11;SMALL(IFERROR(IF(($C$1:$C$11+$D$1:$D$11=0);ROW($A$2:$A$12)-1);FALSE);ROW(1:1));1);"")}

这列出了正确的行,但当 A 丢失时,我无法让它与 B 中的值一起使用。在我看来,应该可以根据 A 是否为空将 INDEX 函数中的列号参数从 1 更改为 2,但我无法让它工作。例如,这什么都不做:

{=IFERROR(INDEX($A$1:$B$11;SMALL(IFERROR(IF(($C$1:$C$11+$D$1:$D$11=0);ROW($A$2:$A$12)-1);FALSE);ROW(1:1));IF(ISBLANK($A1);2;1));"")}

我知道我在这里缺少一些基本的东西。任何帮助表示赞赏!如果有更好的方法,我也会洗耳恭听。

excel excel-formula excel-2016
2个回答
2
投票

在 INDEX 中使用 IF 返回正确的值数组,那么我更喜欢 AGGREGATE 而不是 SMALL。

确认公式时可能需要使用 Ctrl-Shift-Enter 而不仅仅是 Enter:

=IFERROR(INDEX(IF($A$1:$A$11="",$B$1:$B$11,$A$1:$A$11),AGGREGATE(15,7,ROW($C$1:$C$11)/(($C$1:$C$11=0)*($D$1:$D$11=0)),ROW(A1))),"")


0
投票

你可以试试这个公式:

=TRANSPOSE(TOROW(IF((C1:C11+D1:D11)=0,IF(A1:A11=0,B1:B11,A1:A11),1/0),3))

如果

TOROW
不起作用那么

=INDEX(IF(A1:A11<>"",A1:A11,B1:B11),SMALL(IF((C$1:C$11)+(D$1:D$11)=0,ROW(C1:C11),999),ROW(C1:C11)))

注意:如果使用的线路超过 999 条,请将此值增加到最大值以上。数组中的行数。结果结束时,空值将出现

#REF
错误,可以使用另一个 IF 语句消除该错误。

© www.soinside.com 2019 - 2024. All rights reserved.