【问题标题】:Use of ROW() or COLUMN() in OFFSET(...) generating #N/A! error在 OFFSET(...) 中使用 ROW() 或 COLUMN() 生成 #N/A!错误
【发布时间】:2015-08-11 20:09:36
【问题描述】:

我希望在一列数据的顶部有一个单元格,该单元格使用工作表函数来记录其下方包含数据的单元格总数。列中没有间隙,所以我认为我不需要使用 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 也会引发错误。

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

【问题讨论】:

  • 去你的牢房。选择公式功能区 -> 公式审核 -> 评估公式。一次走一步。每个术语的评价是什么?您似乎期望 Row(last_cell)-Row() = 1,000。可以?它可能等于负数吗? last_cell 是什么?转到您的名称管理器并确认它指的是您期望的范围。

标签: excel worksheet-function


【解决方案1】:

您遇到的问题是 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 等效项会使公式脱离 volatile 模式,它只会在影响其结果的事物发生变化时重新计算。

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

【讨论】:

  • 谢谢 Jeeped & Grade 'Eh' Bacon ...抱歉回复晚了,因为我在发帖后就沮丧地回家了...我隐约知道我应该尽量避免 OFFSET 但没有调查了一下...类型不匹配的想法很有意义,我今晚会尝试替代方案
【解决方案2】:

有机会玩了一会儿,我还是一头雾水!

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

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

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

=MATCH(TRUE,INDEX(ISBLANK(INDIRECT(ADDRESS(13,18)&":"&ADDRESS(1012,18))),0),0)-1

哪种方法可行,但代价是将 OFFSET 换成 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,它们似乎都可以工作,所以似乎是在引发错误的复合公式中使用它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-21
    • 2018-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-06-14
    相关资源
    最近更新 更多