如何将一片表格按时间分段后横向扩展成多片

Excel数据原有一片数据,记录着不同人的工作状态和时段:


A B C D E
1
2
3 Name Start End Activity Elapsed hrs
4 Krishna 08:00 11:15 Production 03:15
5 Ranjith 07:00 10:10 Noload 03:10
6 Krishna 07:10 08:25 Break 01:15
7 Ranjith 07:30 12:30 Idle 05:00
8 Krishna 07:00 08:10 Production 01:10
9 Ranjith 11:55 14:55 Production 03:00

计算目标:从G列开始,将该片数据从07:00-15:00每小时扩展出一片(共8片),分别计算出各种状态"Production","Idle","Noload","Tech","Break"(共5种)所耗的小时分钟数。其中前2个片区如下:

G H I J K L M N O P
07:00-08:00 08:00-09:00

Production Idle Noload Tech Break Production Idle Noload Tech Break





1:00


1:00 1:00




0:50 0:25

0:30 1:00
1:00



0:10

一行扩展多行已经有些难度了,Excel公式或power query只能勉强实现,这里难度再次提升,要求一片扩展成多片,导致以前的方法彻底不灵,有必要彻底换个新思路。

实现步骤:

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

2.  用 Excel 打开要计算的文件,选中 A3:E9 区域,按 ctrl+C 复制到剪贴板。

3.  切换到集算器,选中 A1 格,注意要让光标落到 A1 的编辑状态中,用 ctrl+V,将数据粘贴进来。

imagepng

4.  在集算器中继续编写脚本:


A B C D
1 …(复制来的数据)
2 =A1.import@t()
3 =create(${(["Production","Idle","Noload","Tech","Break"]*8).string()}) /create   table with 5*8 cols
4 for   A2 for   8 /loop   records, loop 8 hours
5

=max(elapse@s("07:00",3600*(B4-1)),A4.Start) /actual   start
6

=min(elapse@s("07:00",3600*B4),A4.End) /   actual end
7

=if(C5<C6,interval@s(C5,C6),0) /   actual seconds
8

=if(C7!=0,time(C7\3600,(C7%3600)\60,0)) /seconds   to HH:mm
9

=[null]*5 /5   blank cols
10

=C9(["Production","Idle","Noload","Tech","Break"].pos(A4.Activity))=C8 /put   HH:mm to the correct position
11

=@|C9 /append   up to 40 cols
12
=A3.record(C11) /insert   one record
13
=C11=null /reset

脚本函数 elapse 可计算流逝一段时间后的新时间,@s 表示流逝时间的单位是秒;函数 interval 表示 2 个时间点的间隔,@s 表示间隔的单位是秒;符号 \ 和 % 分别代表除法的商和余数。

5.  按 F9 执行,点击 A3 格,在右侧可以看到执行结果。按下 shift(以便复制列名),点击 "copy data" 按钮,将 A3 的计算结果复制到剪贴板。

112png

6.  返回 Excel 选中 G3 格,用 ctrl+V 粘贴,即可完成计算。最后,手工补写前两行的时间段。