主题:请教:数据转换成积分
nbjfy
[专家分:0] 发布于 2009-09-08 20:50:00
请问在Excel中
如何将前列的数据转换成积分(如10个数据从高到低结算成18、16、14……4、2、0,[color=FF0000]相同值的取平均分[/color],在后列里自动输入)谢谢!
提供宏或代码,就拜你为师。
回复列表 (共7个回复)
沙发
老大徒伤悲 [专家分:29120] 发布于 2009-09-16 09:01:00
不需要拜师
只需要你把问题说清楚。
例如“相同值的取平均分”,相同的话需要平均吗?不同又怎么办?“后列”那么多的单元格,每个的运算都一样吗?等等等等
板凳
nbjfy [专家分:0] 发布于 2009-09-18 09:19:00
先谢谢喽。
假如前一列有十个数据(多或少几个应该一样处理的吧。如果9个积分为16、14、12……4、2、0。如果11个积分为20、18、16、14、……4、2、0。最高为(10-n)*2,最低为0,步长为2)是10,9,9,7,7,7,6,5,4,3。给它们的积分分别为18,15,15,10,10,10,6,4,2,0,输入后一列对应的单元格。这里两个9并列第二,取16和14的平均值15,三个7就取12,10,8的平均值10。
就这样。但是菜鸟搞不出。
3 楼
老大徒伤悲 [专家分:29120] 发布于 2009-09-18 19:12:00
看明白了一点点:
第一列是:16、14、12……4、2、0或者20、18、16、14、……4、2、0之类。
但是10,9,9,7,7,7,6,5,4,3又是怎么来的?
而且“这里两个9并列第二,取16和14的平均值15,三个7就取12,10,8的平均值10。”,其中10为什么不考虑?后面的“6,5,4,3”呢?
还有,为什么“这里两个9并列第二,取16和14的平均值15,三个7就取12,10,8的平均值10”?
4 楼
nbjfy [专家分:0] 发布于 2009-09-19 07:48:00
在Excel中
假如前一列有m个数据,某个数据排名第n,给它们的积分分别为(m-n)*2,最低为0,步长为2(对不起,2楼的积分公式有误,造成你看不清)。十个数据本来积分分别为18、16、14、12、10、8、6、4、2、0。但现在的十个数据是10,9,9,7,7,7,6,5,4,3里有同分。这里的10是唯一的第一就得(10-1)*2=18,第二应得(10-2)*2=16,第三应得(10-3)*2=14,这里两个9并列第二,取16和14的平均值15,三个7并列第四,就取第四、第五、第六应得的12,10,8的平均值10。最后4个没有同分就依次得6,4,2,0。所以输入后一列对应的单元格的积分为18、15,15,10,10,10,6,4,2,0。
再次谢谢。
5 楼
老大徒伤悲 [专家分:29120] 发布于 2009-09-19 14:45:00
是否可以这样理解:
1、第一列数据:10,9,9,7,7,7,6,5,4,3
2、第一列数据对应的“积分”为(m-n)*2:18、16、14、12、10、8、6、4、2、0
然后,就是计算第二列的值:
如同行第一列数值没有并列的,对应到第二列的值就是他的“积分”
如果同行第一列数值有并列,则第二列的值就是这些并列值的“积分”的平均
如果我理解对了,你说下,我写代码,如果理解仍有误差,搞清后,再说。
对了,你是要求必须用excel吗?
6 楼
nbjfy [专家分:0] 发布于 2009-09-19 15:28:00
就是这样了。
再如9个数据为1、2、3、4、5、6、7、8、9,对应的积分是0、2、4、6、8、10、12、14、16。
另9个数据为5、7、7、6、8、5、5、5、7,对应的积分是3、12、12、8、16、3、3、3、12。
是要求用excel,因为我只欠东风。如果您擅长VFP,也可以。我再另搞,跟您学习呗。
您的热道心肠,太令我感动。但在一个版面最多记专家分50分,只有再次谢谢了。
7 楼
老大徒伤悲 [专家分:29120] 发布于 2009-09-19 21:08:00
Sub 积分()
Dim 范围 As Range
Dim 行数 As Integer
Dim 初行 As Integer
Dim 列位置 As Integer
Dim 临时 As Integer
Dim i As Integer
Dim 当前值 As Long
Dim 积分和 As Long
Dim 同值行数 As Integer
Set 范围 = Application.InputBox(prompt:="请用鼠标指定数据区域", Type:=8)
行数 = 范围.Rows.Count
ReDim 积分(行数) As Long
初行 = 范围.Rows(1).Row
For i = 1 To 行数 '以下两行计算积分数组【尽管你肯定了我的说法,但最后的举例仍与2*(m-n)不符】,如有不妥自行修改
临时 = 行数 - i
积分(i) = 临时 + 临时
Next i
列位置 = 范围.Column
For i = 1 To 行数
同值行数 = 1
当前值 = Cells(初行 + i - 1, 列位置)
积分和 = 积分(i)
Do Until 当前值 <> Cells(初行 + i, 列位置)
同值行数 = 同值行数 + 1
i = i + 1
积分和 = 积分和 + 积分(i)
Loop
积分和 = 积分和 / 同值行数
For j = 1 To 同值行数
Cells(初行 + i - j, 列位置 + 1) = 积分和
Next j
Next i
MsgBox "OK!"
End Sub
我来回复