使用数组来获得所选数字的平均值

时间:2018-02-09 20:01:31

标签: arrays excel vba

我在excel表格中连续有12个不同的数字(在不同的行上重复几次),我想得到8个更大数字的平均数(不会使用4个数字)。我想使用一个数组,但是如何在这个数组中选择8个更大的数字?

我想在VBA中这样做。你有任何想法/方向如何进行,因为我不确定如何开始。

示例:12,3,5,6,8,11,9,7,5,8,10,1 (Results=8.875),如果我没有犯错! 感谢。

3 个答案:

答案 0 :(得分:2)

我知道你要求VBA,但这是一个公式。如果这样做,您可以快速投入VBA(使用宏录制器来查看您是否不确定)。

如果在第1行,您可以使用:

=AVERAGE(LARGE(A1:L1,{1,2,3,4,5,6,7,8}))

您应该能够将A1:l1更改为您的号码所在的范围,即

=AVERAGE(LARGE(A1:F2,{1,2,3,4,5,6,7,8}))

编辑:根据您的评论,也不需要VBA。只需使用条件突出显示。突出显示您的数字范围,然后转到条件突出显示 - >上/下规则 - >十大项目。然后只需将10更改为8,然后选择颜色/格式。然后申请!

enter image description here

(上面的每一行都被视为它自己的范围)。

Edt2:呸,我的图片有重复的数字,这就是前8条规则有时突出显示9个数字的原因。如果您要求我将尝试编辑和调整

答案 1 :(得分:2)

您可以使用简单的Excel函数来计算答案

=AVERAGE(LARGE(A1:L1, {1,2,3,4,5,6,7,8}))

在VBA中有点复杂,但这里有一个执行相同计算的函数(每个Mat的Mug显式输入):

Public Function AvgTop8(r As Range) As Double
    Dim Sum As Double, j1 As Integer
    For j1 = 1 To 12
        If WorksheetFunction.Rank(r(1, j1), r) <= 8 Then
            Sum = Sum + r(1, j1)
        End If
    Next j1
    AvgTop8 = Sum / 8#
End Function

Excel RANK函数返回数字列表中数字的等级,最大等级为1,依此类推。因此,您可以搜索12个数字中的8个最大值,将它们相加并除以8。

答案 2 :(得分:-1)

你不需要VBA。您可以使用:

=AVERAGE(LARGE(A1:L1,{1;2;3;4;5;6;7;8}))