按组计算每列最大最小值并横向填入格中
第 1 列是分组列,之后是N个数据列。
A |
B |
C |
D |
|
1 |
Z |
N_1 |
N_2 |
Q_12 |
2 |
A |
100 |
200 |
-100 |
3 |
A |
101 |
-10 |
-200 |
4 |
A |
102 |
201 |
-104 |
5 |
A |
99 |
199 |
300 |
6 |
B |
1000 |
1100 |
1300 |
7 |
B |
1004 |
1200 |
-900 |
8 |
C |
2000 |
-2100 |
2200 |
9 |
C |
1900 |
-2090 |
-2180 |
现在要按第 1 列分组,每组横向的2N个列,依次是组内每个数据列的最大值和最小值。
A |
B |
C |
D |
E |
F |
G |
|
1 |
Z |
N_1Max |
N_1Min |
N_2Max |
N_2Min |
Q_12Max |
Q_12Min |
2 |
A |
102 |
99 |
201 |
-10 |
300 |
-200 |
3 |
B |
1004 |
1000 |
1200 |
1100 |
1300 |
-900 |
4 |
C |
2000 |
1900 |
-2090 |
-2100 |
2200 |
-2180 |
使用 SPL XLL,输入公式:
=spl("=f=(d=E(?)).fname().m(2:),d.groups(Z;${f.( replace( ""max(*):*Max,min(*):*Min"", ""*"", ~ )).concat@c()})",A1:D9)
函数 fname 取表格的列名,groups 分组汇总,m(:2)表示取第 2 到最后一个成员,~ 表示当前成员,${} 表示把字符串当作动态代码去执行。
凑个热闹…
为了避免拼接字符串时太多的双引号,尝试在代码格中直接写文本,然后用 format 函数构造字符串,其中,%s 用于传递文本型参数, 符号 < 表示前一个转换符所描述的参数。如果不用 <,写成 4 个 %s,那之后的 format 函数中就要提供 4 个参数,format(A1,~,~,~,~)…写着玩😄 。
英文版