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-是的,它是一个特定的表的范围-你如何决定哪三组放在一起?你的总数总是可以被三整除吗?