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

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 粘贴,即可完成计算。最后,手工补写前两行的时间段。