在OFFSET(...)中使用ROW()或COLUMN()生成#N / A!错误

时间:2015-08-11 20:09:37

标签: excel worksheet-function

我希望在一列数据的顶部有一个单元格,它使用工作表函数来记录包含数据的单元格下面的单元格总数。列中没有间隙,所以我认为我不需要使用COUNTA,找到第一个空白单元会更有效。为此,我在单元格R12中具有以下功能:

=MATCH(TRUE,INDEX(ISBLANK(OFFSET($R$12,1,0,1000,1)),0),0)-1

这个工作正常,直到我尝试使用命名的引用单元格更灵活地定义调整大小的范围...用

替换上面的内容
=MATCH(TRUE,INDEX(ISBLANK(OFFSET($R$12,1,0,ROW(last_cell)-ROW(),1)),0),0)-1

在单元格中给出#N/A!。由于公式=ROW(last_cell)-ROW()本身可以正常工作所以对我来说这是一个难题,为什么它在复合公式中不起作用...即使用ROW(A1)替换OFFSET参数中的1也会引发错误。

我可以解决它,但这种行为真的很烦人!任何人都可以对此有所了解吗?

2 个答案:

答案 0 :(得分:2)

您遇到的问题是OFFSET function期待一个长整数作为其 [height] 参数,并且您正在推送一个整数数组。是的,数组中只有一个整数,但它仍然是一个数组,并且OFFSET在潜在问题的第一个迹象时跳槽。如果您按照等级' Eh'的建议评估公式。上面的培根,你会看到这个简单的数学减法的结果包含在大括号中(例如 {} )。您需要删除 [height] 参数正在为数组提供的任何指示,否则OFFSET将会阻塞。

=MATCH(TRUE,INDEX(ISBLANK(OFFSET($R$12, 1, 0, MIN(ROW(last_cell)-ROW()), 1)),0),0)-1

有许多基本的Excel工作表函数可以采用1的数组并将其转换为整数。我使用了MIN functionMAXSUMAVERAGE等等都可行。它们采用一组数字并返回一个整数,即使该数字数组只有一个数字。

在一个相关主题上,我发现您试图减少工作簿中的计算周期令人钦佩,但您缺少一个重要的考虑因素。你应该做的第一件事就是完全抛弃OFFSET function

=MATCH(TRUE,INDEX(ISBLANK($R$12:INDEX($R:$R, ROW(last_cell)+1)), , ), 0)-1

OFFSET是一个易变的公式,只要工作簿中的任何更改,就会重新计算。选择INDEX function等效值会使公式退出易失性模式,并且只有在影响其结果的内容发生变化时才会重新计算。

您可能对OFFSET错误地处理浮点错误的方式感兴趣。有关详情,请参阅OFFSET_Floating_Point_Error

答案 1 :(得分:0)

有机会玩一下,我还是很困惑!

OFFSET本身似乎没有问题接受ROW和COLUMN的返回值作为参数。要使用一个简单的例子,这个公式有效:

= COUNTBLANK(OFFSET($ R $ 12 ROW(1)+ 1,0,ROW(R20)列(),1))

尝试了从表达式中消除OFFSET的不同方法,我想出了:

= MATCH(TRUE,INDEX(ISBLANK(INDIRECT(ADDRESS(13,18)及 “:” &安培; ADDRESS(1012,18))),0),0)-1

哪个有效,代价是交换OFFSET for INDIRECT(我希望是2个邪恶中的较小者!)但是我更愿意使用:

= MATCH(TRUE,INDEX(ISBLANK(INDIRECT(ADDRESS(ROW()+ 1,COLUMN())及 “:” &安培; ADDRESS(ROW(last_cell),COLUMN()))),0), 0)-1

哪个不起作用,给#N / A!再次,将任何显式整数更改为ROW或COLUMN表达式。

单独地,我尝试过使用ROW和COLUMN表达式的OFFSET,INDEX,ISBLANK和MATCH,它们似乎都可以工作,所以它似乎是在复合公式中使用它们而抛出错误。