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

我想在一列数据的顶部有一个单元格,它使用工作表函数来logging下面包含数据的单元格的总数。 列中没有空白,所以我想我不需要使用COUNTA,find第一个空白单元格会更有效率。 为此,我在单元格R12中具有以下function:

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

这工作得很好,直到我试图使用一个命名参考单元格更灵活地定义resize的范围…取代上述

 =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参数中replace1会抛出一个错误。

我可以解决它,但这种行为真的很烦人! 任何人都可以解释这一点吗?

你遇到的问题是, OFFSET函数需要一个长整数作为它的[height]参数,并且你正在推送一个整型数组。 是的,数组中只有一个整数,但它仍然是一个数组,OFFSET在遇到潜在问题的第一个标志时正在跳跃。 如果你评估上面的等级“Eh”培根build议的公式,你会看到,简单的math减法的结果被包裹在大括号 (如{} )。 您需要删除[height]参数正在馈送数组或OFFSET将持续窒息的任何指示。

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

有任何数量的基本Excel工作表函数可以采取1的数组,并将其变成一个整数。 我使用了MIN函数 。 MAX , SUM , AVERAGE等都可以工作。 他们采取一系列的数字,并返回一个整数,即使该数组数组只有一个数字。

在一个相关的话题上,我觉得很让人钦佩的是,你正试图减less工作簿中的计算周期,但是你却错过了一个重要的考虑因素。 你应该做的第一件事是完全抛弃OFFSET函数 。

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

OFFSET是一个易失性公式,只要工作簿中的任何内容发生更改,就会重新计算。 selectINDEX函数相当于将公式从易失性模式中提取出来,只有在影响其结果的事情发生变化时才会重新计算。

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

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

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或COLUMNexpression式。

单独地,我已经尝试了OFFSET,INDEX,ISBLANK和MATCH与ROW和COLUMNexpression式,它们都似乎工作,所以它似乎是在使用它们在复杂的公式,这是抛出错误的东西。