我希望在一列数据的顶部有一个单元格,它使用工作表函数来记录包含数据的单元格下面的单元格总数。列中没有间隙,所以我认为我不需要使用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也会引发错误。
我可以解决它,但这种行为真的很烦人!任何人都可以对此有所了解吗?
答案 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 function。 MAX,SUM,AVERAGE等等都可行。它们采用一组数字并返回一个整数,即使该数字数组只有一个数字。
在一个相关主题上,我发现您试图减少工作簿中的计算周期令人钦佩,但您缺少一个重要的考虑因素。你应该做的第一件事就是完全抛弃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,它们似乎都可以工作,所以它似乎是在复合公式中使用它们而抛出错误。