列方向分类聚合
Excel表格有多个重复的列。
A |
B |
C |
D |
E |
F |
G |
H |
|
Alpha |
Alpha |
Beta |
Beta |
Alpha |
Delta |
Beta |
||
1 |
A |
0.56 |
0.1 |
0.55 |
0.74 |
0.38 |
0.02 |
0.44 |
2 |
B |
0.06 |
0.32 |
0.22 |
0.55 |
0.9 |
0.7 |
0.38 |
3 |
C |
0.16 |
0.08 |
0.63 |
0.9 |
0.7 |
0.78 |
0.2 |
4 |
D |
0.8 |
0.92 |
0.03 |
0.57 |
0.48 |
0.52 |
0.28 |
5 |
E |
0.47 |
0.21 |
0.81 |
0.4 |
0.68 |
0.8 |
0.13 |
6 |
F |
0.39 |
0.19 |
0.76 |
0.88 |
0.69 |
0.81 |
0.81 |
要求按列进行分类求和。
9 |
A |
B |
C |
D |
10 |
Alpha |
Beta |
Delta |
|
11 |
A |
1.04 |
1.73 |
0.02 |
12 |
B |
1.28 |
1.15 |
0.7 |
13 |
C |
0.94 |
1.73 |
0.78 |
14 |
D |
2.2 |
0.88 |
0.52 |
15 |
E |
1.36 |
1.34 |
0.8 |
16 |
F |
1.27 |
2.45 |
0.81 |
使用 SPL XLL
=spl("=E@2bp(E@bp(?).groups(#1;${(?.len()-1).(eval@s($[sum(#?)],#+1)).concat@c()}))",B1:H7)
函数 E 用于表格转换,@p 表示转置,@b 表示不含标题,@2 表示两层序列。groups 分组汇总,${} 把字符串当表达式执行,eval@s() 循环替换序列里的字符串,并当作表达式执行。concat@c 用逗号合并序列。
大佬,你用的是那个版本的 SPL XLL?
有两个问题:
1、这样写成一行,宏表达式里的变量 d 识别不出来;我记得老早之前似乎是可以的,现在的计算顺序好像是首先执行宏里的表达式。
2、eval@s() 这个选项是新加的吗?函数文档里没有这个选项。
1. 你说的对。我刚改了代码,直接用参数?。多个参数时,表达式里多次用? 可能会错位(本题是一个参数用多次?),尽量避免。
2.eval@s 是新加的
英文版 https://c.scudata.com/article/1722493938503
eval@s 👍 👍 👍