如何实现有重复值的排名
Excel记录着一些人的4项指标,如下图:
A | B | C | D | E | |
1 | Name | Self Direction | Power | Universalism | Achievement |
2 | Mary | 2 | 4 | 4 | 4 |
3 | Tom | 5 | 3 | 5 | 3 |
计算目标:从F列开始,按照指标值从大到小的顺序(逆序),依次填入指标名。
对于指标值相同的指标名,有两种处理方法,分别是:
1.按顺序排列在不同的单元格,如下:
F | G | H | I | |
1 | Rank1 | Rank2 | Rank3 | Rank4 |
2 | Power | Universalism | Achievement | Self Direction |
3 | Self Direction | Universalism | Power | Achievement |
2.按顺序挤在同一个单元格,如下:
F | G | H | I | |
1 | Rank1 | Rank2 | Rank3 | Rank4 |
2 | Power,Universalism,Achievement | Self Direction | ||
3 | Self Direction,Universalism | Power,Achievement |
这里包含大量与顺序有关的计算,有些可以用Excel函数,比如顺序或逆序排序,有些没有对应的Excel函数,实现起来就比较困难,比如排序后取得某个值原来的(排序前的)序号,或分组后取得某组数据原来的序号。
实现步骤:
1. 运行集算器(可以到润乾官网下载,用职场版,首次运行时会提示加载授权,下载个免费的就够了)
2. 用 Excel 打开要计算的文件,选中 B2:E3 区域,按 ctrl+C 复制到剪贴板。
3. 切换到集算器,选中 A1 格,注意要让光标落到 A1 的编辑状态中,用 ctrl+V,将数据粘贴进来。
4. 在集算器中继续编写脚本(处理方法 1):
A | |
1 | …(从 Excel 复制来的数据) |
2 | =A1.split@n("\t") |
3 | =A2.(~.psort@z()) |
4 | =A3.(["Self Direction","Power","Universalism","Achievement"](~)) |
5 | =A4.concat@n("\t") |
脚本函数split将字符串拆开重组成表格,psort取排序后的各成员在排序前的序号。@z表示逆序。A2.()表示对集合A2的成员进行循环计算,~是循环中的当前成员。A3()表示按序号取集合A3的成员。
5. 按 F9 执行,点击 A5 格,在右侧可以看到执行结果,点击 "copy data" 按钮,将计算结果复制到剪贴板(也可直接 ctrl+C)。
6. 返回 Excel 选中 F2 格,用 ctrl+V 粘贴,即可完成计算。之后可手工补写列头。
7. 处理方法 2 脚本如下,操作过程不变。
` | A |
1 | …(从 Excel 复制的数据) |
2 | =A1.split@n("\t") |
3 | =A2.(~.group@p(~).rvs()) |
4 | =A3.(~.(["Self Direction","Power","Universalism","Achievement"](~).concat(","))) |
5 | =A4.concat@n("\t") |
脚本函数group可对数据分组,默认返回各组成员,@p表示返回各组成员原来的序号。