希望你能帮忙..!
我有这样的名单..
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
我想将它们分成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
目前我有9个项目..但这将是n个数字,并且总是需要在3个组中。
我尝试了其他方法..但没有成功..
答案 0 :(得分:0)
如果您将产品名称放在A列,第2行到第10行,即Prod_1等,并将其相应的值放在“B”行2到10行中,那么此子例程将执行您的示例要求明确要求的内容。它可以帮助您了解VBA脚本如何工作,以便您可以在以后修改它以满足新的需求。
在代码中,您将看到正在创建的两个数组originalArray,它是一个多维数组。它有9个项目,包含两个数据 - 名称和值。它填充了从第2行到第10行的循环,将每行数据收集到数组中的新行。
接下来,我们有一个分离元素的数组,或者更确切地说你希望如何将这些组分成3个。这也是一个多维数组,但它是在一个步骤中初始化和定义的。
添加“For”循环以将组放在“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