需要优化假期计划Excel的帮助(总和超过10000行)

时间:2018-07-04 10:58:52

标签: excel

在这张图片中,您可以在F到H列中看到原始数据是什么样的,而A到D列则是我需要的(但是是水平的)。

table

我将数据转换为显示员工休假时的确切日期,而不显示日期范围,例如:

John    02.01.2018  03.01.2018  04.01.2018  05.01.2018  
John    07.01.2018  08.01.2018  09.01.2018  10.01.2018  
Tom     01.01.2018  02.01.2018  03.01.2018  04.01.2018  05.01.2018
Tom     07.01.2018  08.01.2018  09.01.2018      
Mark    04.01.2018  05.01.2018  06.01.2018      
Mark    08.01.2018  09.01.2018  10.01.2018  

这样我可以使用sumproduct来填写我的计划表,并且可以正常工作。我设法为管理人员做到了,因为原始数据只有400行,我使用以下公式:

=IF(SUMPRODUCT((OFFSET(VMX!$G$2;0;0;COUNTIF(VMX!$G:$G;">""")-1;1)=Planner!$A3)*(INDIRECT("VMX!$O$2:$AS$"&COUNTIF(VMX!$G:$G;">"""))=Planner!G$1)*(OFFSET(VMX!$M$2;0;0;COUNTIF(VMX!$M:$M;">""")-1;1)="X"))>0;"X";IF(SUMPRODUCT((OFFSET(VMX!$G$2;0;0;COUNTIF(VMX!$G:$G;">""")-1;1)=Planner!$A3)*(INDIRECT("VMX!$O$2:$AS$"&COUNTIF(VMX!$G:$G;">"""))=Planner!G$1)*(OFFSET(VMX!$M$2;0;0;COUNTIF(VMX!$M:$M;">""")-1;1)="Y"))>0;"Y";IF(SUMPRODUCT((OFFSET(VMX!$G$2;0;0;COUNTIF(VMX!$G:$G;">""")-1;1)=Planner!$A3)*(INDIRECT("VMX!$O$2:$AS$"&COUNTIF(VMX!$G:$G;">"""))=Planner!G$1)*(OFFSET(VMX!$M$2;0;0;COUNTIF(VMX!$M:$M;">""")-1;1)="O"))>0;"O";"")))

我使用名称管理器将此公式简化为:

=IF(SPX>0;"X";IF(SPY>0;"Y";IF(SPO>0;"O";"")))

工作表中的VMX是数据。

数据范围应该是动态的,因为我使用了偏移量和间接方法,但是当我尝试对所有10k +行的员工使用它时,excel就会冻结。

有人知道更有效的方法吗?

1 个答案:

答案 0 :(得分:0)

首先将原始数据转换为表(tblVacDates)。然后,您可以使用COUNTIFS使用这样的公式。

=IF(COUNTIFS(tblVacDates[Name];B$1,tblVacDates[Start];"<="&$A2;tblVacDates[End];">="&$A2)=0;"";"X")

将公式粘贴到其他列(不要拖动)。然后,您可以复制/拖动

enter image description here