0

我有以下间接参考:

=AVERAGE(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3))

在'Pages'!D3 我有另一个页面'1D_3',在'Pages'!J3 我有 2:2。

我需要更改上面的代码以找到每个连续值之间差异的平均值。我只能更改 'Pages'!J3 (2:2) 中的值,并且可以更改上面的等式。

从这个参考http://www.excelforum.com/excel-general/742194-difference-between-consecutive-number.html我已经想出了如何在每个连续之间做差异,但前提是我有一个已知的范围。前任。对于元素 A1:G1,

=SUM(A1:F1-B1:G1)

然后我可以对平均值执行以下操作:

=SUM(A1:F1-B1:G1)/(COUNT(1:1)-1)

但是如果我有一个未指定的范围,我不知道如何做 SUM 部分。我也不确定如何在 INDIRECT 函数中实现这一点。

只是一些额外的背景信息可以澄清这一点,数组中的值是秒表的时间。假设每个值都是时间差,但它只是秒表上的时间(例如 0.0015、1.0034、2.356 等)。我想找到每个值之间的平均持续时间。

任何帮助将不胜感激。

4

2 回答 2

0

在解决您寻求的公式之前,让我指出您所需要的只是(EndValue-StartValue)/NumberOfEntries- 无需首先计算每个时间点的差异,因为无论如何这将在最终计算中自行抵消。

现在假设Pages!J3仍然只包含行号,即公式=INDIRECT("'" & Pages!D5 & "'!" & Pages!J3)将返回对该行的引用。在以下公式中,我将X其用作 INDIRECT 公式的替代品,以使其更具可读性:

=(OFFSET(X,0,0,1,1)-OFFSET(X,0,COUNT(X),1,1))/COUNT(X)

现在你只需要用X上面的公式替换 - 或者简单地用公式添加一个命名范围。如果你把它结合起来,你最终会得到这个公式:

=(OFFSET(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3),0,0,1,1)-OFFSET(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3),0,COUNT(X),1,1))/COUNT(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3))
于 2013-02-28T07:29:37.463 回答
0

我尝试了另一张海报的建议,但即使更换了剩余的“X”,它也不起作用。我在 Excel 中研究了其他一些示例,最终得出以下结论。为了不让这迷失在互联网的沙滩上,我决定发布我自己的解决方案。所以我想要时间值之间差异的平均值。本质上,我想要总次数(平均值)的总和。困难在于间接引用和间接引用中的间接引用。

所以我所拥有的是另一个工作表上的多个工作表、页面(B 到 E 列上的页面)和范围(J 列上的页面)上的数据,以及另一个工作表上的结果操作。

=SUM(INDIRECT("'"&Pages!D5&"'!C2"):INDIRECT("'"&Pages!D5&"'!"&SUBSTITUTE(ADDRESS(2,COUNTA(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3)),4),"1",""))-INDIRECT("'"&Pages!D5&"'!B2"):INDIRECT("'"&Pages!D5&"'!"&SUBSTITUTE(ADDRESS(2,COUNTA(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3))-1,4),"1","")))/(COUNT(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3))-1)

要将其分解为多个部分,我们有:

=SUM(junk)/COUNT(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3))-1

而“垃圾”部分如下。最终,它的形式是:

=SUM(A1:F1-B1:G1)

如果没有 INDIRECT,如果我们有一页名为“8D_2FU”的数据:

=SUM('8D_2FU'!C2:AW2-'8D_2FU'!B2:AV2)/(COUNT('8D_2FU'!2:2)-1)

请注意,对于此实现,我们在 AW 上选择了一个最大值列,该列适用于所有可能的数据集。

对“垃圾”还有另一部分的兴趣。您不能在 INDIRECT 引用中进行 INDIRECT 引用,因此为了欺骗 Excel,我们可以使用 SUBSTITUTE 命令并通过转换 INDIRECT 引用中包含的地址来获得相同的结果。

SUBSTITUTE(ADDRESS(2,COUNTA(INDIRECT("'" & Pages!D5 & "'!" & Pages!J3)),4),"1",""))

最后,要使用它,您必须通过键入 CTRL+SHIFT+Enter 而不是键入“Enter”来使其成为数组操作。使用蛮力测试用例也确认了结果。

于 2013-03-16T23:51:02.330 回答