按组计算每列最大最小值并横向填入格中
第 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,~,~,~,~)…写着玩😄 。
英文版