【问题标题】:Offset function returns #VALUE! with small dataset偏移函数返回#VALUE!小数据集
【发布时间】:2015-04-30 22:49:01
【问题描述】:

我在 excel 中有一些数据,想使用偏移函数访问某些行,但是该函数为我的小数据集返回 #VALUE!

使用这个,OFFSET(A2;0;0;COUNTA(A2:A99999);1) 我得到#VALUE!。将公式更改为 OFFSET(A2;0;0;100;1) 时,我得到一个值。

任何建议,我做错了什么?

感谢您的回复!

【问题讨论】:

  • 完整的公式是什么?您似乎省略了 SUM 之类的包装函数或类似的东西。
  • @Jeeped 谢谢你的回答!然而,这是我的公式。我在一个非常复杂的 vba 脚本中使用这部分,它返回给我#VALUE
  • @mrquad Offset function documentation。正如 MissPalmer 回答的那样,它返回一个范围。您需要以某种方式使用范围。顺便说一句,如果您将任何一个公式放在数据行中,您可以看到它将返回该行中的数据。

标签: excel excel-formula excel-2010 vba


【解决方案1】:

如果=OFFSET(A2;0;0;COUNTA(A2:A99999);1) 是您的完整公式,由于推断位置(我希望这是正确的术语),您将得到一个带有硬编码数字的结果。这意味着当您引用一个范围但未处理整个范围时,操作单元格是相对于当前位置的单元格。

如果您将=$A$2:$A$11 放入 D2 并填写,您将根据与 A 列匹配的行位置获得处理结果。继续填写,当您超过第 11 行时,您将收到 #VALUE! 错误。

这就是=OFFSET(A2; 0; 0; 100; 1) 返回零而=OFFSET(A2; 0; 0; COUNTA(A2:A99999); 1) 返回#VALUE! 错误的原因。第一个公式与=$A$2:$A$101 相同,它返回零,因为您将公式放在第 101 行上方的单元格中(引用 A 列中返回值 0 的空白单元格)。第二个(带有COUNTA function)就像说=$A$2:$A$11,您将其放入第13行(第11行下方)的单元格中。

附录:

在相关说明中,INDEX functionMATCH function 的这些变体是非易失性的,并且比 OFFSET function 更实用,同时提供与您使用 OFFSET 和 COUNTA function 实现的相同的单元格范围引用.

'for text in a column
=$A$2:INDEX($A:$A, MATCH("zzz", $A:$A))

'for numbers in a column
=$A$2:INDEX($A:$A, MATCH(1e99, $A:$A))

'for unknown in a column
=$A$2:INDEX($A:$A, IFERROR(MATCH(1e99, $A:$A), MATCH("zzz", $A:$A)))

'for combined in a column
=$A$2:INDEX($A:$A, MAX(MATCH(1e99, $A:$A), MATCH("zzz", $A:$A)))

'I don't like COUNTA but it works as long as there are no blanks
=$A$2:INDEX($A:$A, COUNTA($A:$A))

这种方法有很多变体。也许您可以将上述其中一种用于您的目的。

【讨论】:

    【解决方案2】:

    OFFSET(A2;0;0;(range > 1);1) 将返回一个数组而不是单个单元格的值。仅当您将 sum 或其他一些聚合函数放在它周围时,这才有意义。 (你想用公式实现什么?)

    例如

    =SUM(OFFSET(A2;0;0;COUNTA(A2:A99999);1))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2023-03-13
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多