如何把多列数据拆分后变成多行数据

Excel从第2列开始,每两列是一对(即除第1列之外的偶数列和奇数列,比如第2和列第3列),这样的列共4对,具体如下:


A

B

C

D

E

F

G

H

I

1

Micro

Group

Series

Group1

Series1

Group2

Series2

Group3

Series3

2

1

Back

3

Biceps

1

Delts

1

Traps

1

3

1

Chest

4

Triceps

2

Delts

2



4

1

Biceps

2







5

1

Cuads

4

Glut

2





6

2

Back

4

Biceps

2

Delts

2

Traps

2

7

2

Chest

5

Triceps

3

Delts

3



8

2

Biceps

3







9

2

Cuads

5

Glut

3





计算目标:按照第1列、所有的偶数列分组,组内对奇数列汇总。结果应当如下:


A

B

C

1

1

Back

3

2

1

Biceps

3

3

1

Chest

4

4

1

Cuads

4

5

1

Delts

3

6

1

Glut

2

7

1

Traps

1

8

1

Triceps

2

9

2

Back

4

10

2

Biceps

5

11

2

Chest

5

12

2

Cuads

5

13

2

Delts

5

14

2

Glut

3

15

2

Traps

2

16

2

Triceps

3

这里的难点是把N列化为3列(第1列,所有的偶数列,所有的奇数列),之后进行分组汇总就会简单许多。把N列化为3列,需要对每行取“N除以2后取整次数据,比如第2行要取4次数据,分别是1/2/31/4/51/6/71/8/9。类似的有序计算很难用Excel公式表达。

实现步骤:

1.      运行集算器(可以到润乾官网下载,用职场版,首次运行时会提示加载授权,下载个免费的就够了)

2.  编写脚本并执行


A

1

=file("data.xlsx").xlsimport@w().to(2,)

2

=A1.news(~.len()\2;A1.~(1):Micro,A1.~(#*2):Group,A1.~(#*2+1):Series)

3

=A2.groups(Micro,Group;sum(Series):Series)

4

=file("result.xlsx").xlsexport@t(A3)

脚本函数xlsimport可读入Excel文件,因为列头无用,所以用to(2,)取第二行到最后一行,news函数把一行变多行,其中 ~.len()\2 是要变成的行数,即N除以2后取整,比如原第2行需变成新4行。然后按顺序从原行取出列并组成新行,~(1)是第 1 列,# 是当前次数(即第 1、2、3、4 次),~(#*2) 是偶数列(即 2、4、6、8 列),~(#*2+1) 是奇数列(即 3、5、7、9 列)。最后group用来分组汇总。