偏移功能返回#VALUE!用小数据集

时间:2015-04-30 08:59:10

标签: excel excel-vba excel-formula excel-2010 vba

我在excel中有一些数据,并希望使用offset函数访问某些行,但是该函数会为我的小数据集返回#VALUE!

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

enter image description here

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

感谢您的回复!

2 个答案:

答案 0 :(得分:2)

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

e.g。

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

答案 1 :(得分:2)

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

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

这就是=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行下方)的单元格中。

<强> Addndum:

在相关的说明中,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))

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

相关问题