【问题标题】:How to get the average of x data in a specific range如何获取特定范围内x数据的平均值
【发布时间】:2018-09-29 19:04:32
【问题描述】:

我正在做如下平均数据(VBA Excel):

    If n < 8 Then
        Sheet2.Cells(i, 20).Value = "=SUM(E" & i & ":S" & i & ")/" & n
    Else
        Sheet2.Cells(i, 20).Value = "=AVERAGE(LARGE(E" & i & ":S" & i & ", {1,2,3,4,5,6,7,8}))"
    End If
    n = 0

此代码有效,因为我想要 15 个值中最好的 8 个值。 我的问题是如何对 x 值做同样的事情(x 将通过用户表单引入,0&lt;x&lt;16)。 当然,我可以使用 15 行的 Select Case,具体取决于 x,但在我看来这不是一个好的编码。

有什么想法吗?

【问题讨论】:

  • 我最后一句话被删了。不知道为什么?然后,完成它:x 介于 0 和 16 之间,不包括在内。我想通过用户表单介绍 x 以供选择。当然,我可以使用 15 行的 Select Case,但我认为这不是一个好的编码。有任何想法吗?注意:我没有对我的问题的正文进行编辑,因为原文就在那里!抱歉,它现在似乎在那里,我无法摆脱这条评论。
  • 您的 Excel 版本中是否有 AVERAGEIF 公式?

标签: excel vba average


【解决方案1】:

如果AVERAGEIF 可用:

Sheet2.Cells(i, 20).Value = "=AVERAGEIF(E" & i & ":S" & i & ","">=""&LARGE(E" & i & ":S" & i & "," & x & "))"

对于 i = 2 和 x = 8,公式为:=AVERAGEIF(E2:S2,"&gt;="&amp;LARGE(E2:S2,8))

如果没有:

Sheet2.Cells(i, 20).Value = "=SUMIF(E" & i & ":S" & i & ","">=""&LARGE(E" & i & ":S" & i & "," & x & "))/" & x

对于 i = 2 和 x = 8,公式为:=SUMIF(E2:S2,"&gt;="&amp;LARGE(E2:S2,8))/8

【讨论】:

  • 谢谢(使用 AVERAGEIF)。我花了一些时间来理解,但它工作正常。
  • 我发现当有超过 2 个或更多的值与 xth 相同时,它可能是错误的。但是,如果值相同,它仍然会返回您想要的结果。
  • 感谢这个额外的 cmets。但是,在我的情况下,它不太可能具有相同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 2017-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
相关资源
最近更新 更多