VBA按降序排序-基于平均值

VBA按降序排序-基于平均值,vba,excel,sorting,average,Vba,Excel,Sorting,Average,希望你能帮上忙 我有这样的清单 Item Value Prod_1 0.22 Prod_2 0.30 Prod_3 0.23 Prod_4 0.22 Prod_5 0.28 Prod_6 0.23 Prod_7 0.22 Prod_8 0.28 Prod_9 0.24 项目价值 Prod_1 0.22 Prod_2 0.30 Prod_30.23 Prod_4 0.22 产品5 0.28 Prod_6 0.23 Prod_7 0.22 产品8 0.28

希望你能帮上忙

我有这样的清单


Item    Value
Prod_1  0.22 
Prod_2  0.30 
Prod_3  0.23 
Prod_4  0.22 
Prod_5  0.28 
Prod_6  0.23 
Prod_7  0.22 
Prod_8  0.28 
Prod_9  0.24

项目价值
Prod_1 0.22
Prod_2 0.30
Prod_30.23
Prod_4 0.22
产品5 0.28
Prod_6 0.23
Prod_7 0.22
产品8 0.28
Prod_9 0.24

我想把它们分成3组,这样这三个项目的平均值就需要按降序排序

这里的挑战是知道需要使用哪种组合-我想稍后再对它们进行排序

请看下面

这就是我想要的



Name    Value   Average  

Prod_1  0.22    0.2500000
Prod_2  0.30        
Prod_6  0.23        

Prod_9  0.24    0.2466667
Prod_5  0.28        
Prod_7  0.22        

Prod_4  0.22    0.2433333
Prod_8  0.28        
Prod_3  0.23

名称值平均值
产量1 0.22 0.2500000
Prod_2 0.30
Prod_6 0.23
产品编号9 0.24 0.246667
产品5 0.28
Prod_7 0.22
产品4 0.22 0.2433333
产品8 0.28
Prod_30.23

目前我有9件物品。。但这将是n个数字,并且始终需要在3的组中


我试过其他方法。。但是没有成功。

如果您将产品名称放在A列第2行到第10行,即Prod_1等,并将其相应的值放在“B”列第2行到第10行,则此子例程将执行您的示例明确要求的操作。它可能会帮助您了解VBA脚本是如何工作的,以便您可以在以后修改它以满足新的需求

在代码中,您将看到创建了两个数组originalArray,这是一个多维数组。它有9个项目,其中包含两个数据段-名称和值。它由一个从第2行到第10行的循环填充,将每行数据收集到数组中的新行中

接下来,我们有一个分离元素的数组,或者更确切地说,您希望如何将组划分为3。这也是一个多维数组,但它是在一个步骤中初始化和定义的

将“For”循环中的n添加到“E”和“F”列中,将三个组放在“E”和“F”列中,并将它们的平均值放在“G”列中。然后它跳过一行并执行下一组3,然后跳过一行并执行最后一组3

仔细研究代码,甚至用F8键一步一步地完成,它将帮助您理解代码是如何自上而下运行的-

Sub getAvgs()
Dim origArray(1 To 9, 1 To 2)
Dim varData, rowCounter As Long, averager As Double

    For i = 1 To 9
        origArray(i, 1) = Sheet1.Range("A" & i + 1).Value
        origArray(i, 2) = Sheet1.Range("B" & i + 1).Value
    Next i

    varData = [{1, 2, 6; 9, 5, 7; 4, 8, 3}]


    rowCounter = 3
    Columns("G:G").Select
    Selection.NumberFormat = "0.00000"
    Columns("E:G").ColumnWidth = 12
    Sheet1.Range("E1").Value = "Name"
    Sheet1.Range("F1").Value = "Value"
    Sheet1.Range("G1").Value = "Average"


    For i = 1 To 3
        For f = 1 To 3
            Sheet1.Range("E" & rowCounter).Value = origArray(varData(f, i), 1)
            Sheet1.Range("F" & rowCounter).Value = origArray(varData(f, i), 2)
            averager = averager + origArray(varData(1, f), 2)
            rowCounter = rowCounter + 1
        Next f
        Sheet1.Range("G" & rowCounter - 3).Value = averager / 3
        averager = 0
        rowCounter = rowCounter + 1
    Next i

End Sub

请添加vba代码并告诉我们您尝试了什么;现在还不清楚三胞胎应该如何分组?你是指工作表上的一个范围,或者一个变量数组,或者。。。?请提供代码。老实说,我是一个初学者-不知道如何启动逻辑所以我在看排列和组合VBA-是的,它是一个特定的表的范围-你如何决定哪三组放在一起?你的总数总是可以被三整除吗?