在这张图片中,您可以在F到H列中看到原始数据是什么样的,而A到D列则是我需要的(但是是水平的)。
我将数据转换为显示员工休假时的确切日期,而不显示日期范围,例如:
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就会冻结。
有人知道更有效的方法吗?