Excel公式:使用INDIRECT获取具有命名范围的相同行号导致#VALUE!错误

时间:2016-08-04 10:45:10

标签: excel-vba indexing named-ranges excel-indirect vba

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没有提供行号以供参考?据我所知,它根本不喜欢它被用作命名范围查找的一部分。

提前谢谢!

此致 迪伦。

1 个答案:

答案 0 :(得分:1)

这是数组上下文中INDIRECT的已知行为。由于INDIRECT将返回引用而不是值,因此数组上下文似乎无法从该引用中获取值。也许这也是由INDIRECT的不稳定行为造成的。

简单示例:

enter image description here

公式:

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