Excel 将非分组列的数据移到同一行
例题描述和简单分析
有 Excel 数据如下所示:
Account Name |
Join Date |
Other Columns |
Package |
Account 1 |
2001/1/19 |
Data |
Main Package |
Account 1 |
2001/1/19 |
Data |
Bolt On |
Account 1 |
2001/1/19 |
Data |
Add on |
Account 2 |
2001/1/18 |
Data |
Main Package |
Account 3 |
2001/1/17 |
Data |
Main Package |
Account 3 |
2001/1/17 |
Data |
Add on |
Account 4 |
2001/1/19 |
Data |
Main Package |
需要按 ID 分组汇总其余列,结果如下:
Account Name |
Join Date |
Other Columns |
Package |
Extra Item |
Extra Item |
Account 1 |
2001-01-19 |
Data |
Main Package |
Bolt On |
Add on |
Account 2 |
2001-01-18 |
Data |
Main Package |
||
Account 3 |
2001-01-17 |
Data |
Main Package |
Add on |
|
Account 4 |
2001/1/19 |
Data |
Main Package |
解法及简要说明
使用插件 SPL XLL
在空白单元格填写公式:
=spl("=((a=?.m(2:).group(~(1)).(if(~.len()>1,~=~.m(1)|~.m(2:).(~(4)),~=~.m(1))),b=?.m(1).pad(""Extra Item"",a.max(~.len())),[b]|a))",A1:D8)
如图:
返回结果:
简要说明:
a: 取第二行开始的数据部分,按第一列(Account Name)分组,若组内数据行数大于 1,则把从第二行开始的第四列(Package)依次拼接到第一行数据的尾部,否则取组内的第一条数据。
b: 用串 "Extra Item" 将第一行(表头)补足到和数据部分的最大列数一样长。
最后将表头b与数据a合并后的结果返回。
https://stackoverflow.com/questions/63641240/move-duplicate-rows-unique-value-to-new-column
英文版