0

我需要在一行中找到满足> = 0的简单标准的最后8个(最右边,从右到左)数字单元格值的平均值,即。行中包含零、负值和正值的混合的零或正数。换句话说,我需要从包含从行尾向后计数的 0 或更高计数的所有单元格中找到第 8 个单元格引用。

示例行:

1.6425  0.6233  5.2899  4.4372  2.0356  3.9796  1.5306  3.8344  0   -1  -1  3.8294  -1  3.0957  0   3.7572  -1

预期结果:2.50 (3.7572 + 0 + 3.0957 + 3.8294 + 0 + 3.8344 + 1.5306 + 3.9796) / 8

4

2 回答 2

0

我解决了你的问题,但有很多辅助列。在下文中,我假设您的数据在 A 到 Q 列中,从第 2 行开始

  1. 在第一行,将字母 A 到 J 放在 T 到 AC 列中

  2. 在第一个数据行

    2.1 将公式=ROW()放在 S 列

    2.2 将数组公式(输入时按Shift + Ctrl + Enter)=SUM(IF(INDIRECT(T$1 & $S2 & ":Q" & $S2,TRUE)>=0,1,0))放到T列并一直复制到AC列

    2.3=INDEX($T$1:$AC$1,MATCH(8,T2:AC2,0))在 AD 列输入数组公式

    2.4 最后把数组公式=SUM(IF(INDIRECT(AD2 & S2 & ":Q" & S2) >= 0, INDIRECT(AD2 & S2 & ":Q" & S2), 0))/8放到AE列,这就是你想要的结果

  3. 您可以将包含公式的行复制到包含数据的每一行

这是它在我的 Excel 中的外观: 截屏

它能做什么:

  • 在列 S 中是当前行——我们需要它用于INDIRECT函数,因为在数组函数中不起作用ROW()INDIRECT

  • 在列 T - AC 中,我们计算当前数据行右侧的正数或零列数,从不同的列开始——它们的字母在第一行。我们可以开始的最右边的列是 J,否则不会有 8 个值。

  • 在 AD 列中,我们匹配数字 8,从第一行我们得到必须开始平均范围的列

  • 最后,在 AE 列中,我们INDIRECT用来创建对我们想要的范围的引用,将所有 >= 0 的数字相加并除以 8

于 2012-08-02T09:10:27.327 回答
0

AVERAGEIFS我使用并仅添加一个补充行A2:Q2干净地解决了这个问题,以仅标记所需的 8 个单元格。这个额外的行从行的末尾向后计数,仅当第 1 行上方的单元格小于 0 时,从前一个计数(右侧的下一个单元格)迭代1,公式=IF(A1<0,B2,B2+1)在整个行 A2:Q2 中复制。然后,这充当主公式的标准2,即使用右侧的前 8 个单元格,其值 >=0

然后=AVERAGEIFS(A1:Q1, A1:Q1, ">=0", A2:Q2, "<9")在单元格C4中简单地获取结果。C5是针对计算结果的简单手动测试。

这是 Excel 文件:https ://dl.dropbox.com/u/4974539/averageifs_tweak.xlsx - 和屏幕截图:

在此处输入图像描述

于 2012-08-02T15:27:43.787 回答