Greetings Stack Overflow denizens!
我遇到一个问题,试图让一个涉及INDIRECT的公式与INDEX一起表现自己。当我使用特定的行值时,数组工作正常,但当我尝试使用INDIRECT获取当前行号时,我得到一个#VALUE!错误。
例如:我在单元格R108中有这个,它可以正常工作:
=IF(OR(ISERROR(INDEX(MODEL,SMALL(IF(OWNERID=N108,ROW(OWNERID)-ROW(INDEX(OWNERID,1,1))+1),1))),N108=""),"",INDEX(MODEL,SMALL(IF(OWNERID=N108,ROW(OWNERID)-ROW(INDEX(OWNERID,1,1))+1),1)))
N108指的是与OWNERID匹配的值,OWNERID是同一工作簿中另一个工作表上的命名范围。
但我想做的是公式引用它所在的同一行,所以这就是我想要的工作:
=IF(OR(ISERROR(INDEX(MODEL,SMALL(IF(OWNERID=INDIRECT("N"&ROW()),ROW(OWNERID)-ROW(INDEX(OWNERID,1,1))+1),1))),INDIRECT("N"&ROW())=""),"",INDEX(MODEL,SMALL(IF(OWNERID=INDIRECT("N"&ROW()),ROW(OWNERID)-ROW(INDEX(OWNERID,1,1))+1),1)))
只是为了清楚起见;在一张纸上我有一个计算机信息列表,它有两个命名范围:MODEL和OWNERID 由于公式是一个数组,我记得按CTRL + SHIFT + ENTER。
我错过了什么导致INDIRECT没有提供行号以供参考?据我所知,它根本不喜欢它被用作命名范围查找的一部分。
提前谢谢!
此致 迪伦。
答案 0 :(得分:1)
这是数组上下文中INDIRECT
的已知行为。由于INDIRECT
将返回引用而不是值,因此数组上下文似乎无法从该引用中获取值。也许这也是由INDIRECT
的不稳定行为造成的。
简单示例:
公式:
D1
= {=SUM(IF(A1:A10=INDIRECT("A"&{3,5,7}),B1:B10))}
D3
= {=SUM(IF(A1:A10=N(INDIRECT("A"&{3,5,7})),B1:B10))}
D5
= {=SUM(IF(A1:A10=T(INDIRECT("A"&{3,5,7})),B1:B10))}
如果您看到INDIRECT
包含在N
中,它会按预期工作。
但为此我们必须知道这些值是数字还是文本。如果是文字内容,例如Z1, Z2, Z3, ... , Z10
列中的A
,则必须使用T
代替N
。