需要帮助优化假期计划Excel(10000行的sumproduct)

需要帮助优化假期计划Excel(10000行的sumproduct),excel,Excel,在这张图片中,您可以在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.2

在这张图片中,您可以在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中是数据

数据范围应该是动态的,因为我使用了offset和indirect,但当我尝试对所有员工使用它时,即10k+行,excel只是冻结


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

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

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

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


>将公式粘贴到其他列(不要拖动)。名字可能是100+而且名字来自pivot表,每个经理都可以在该表中选择自己的员工。@mandmi-那么问题出在哪里?您不必一次粘贴一个。选择单元格B2。复制选择单元格B3:B100。粘贴选择单元格B2:B100。拖下来。完成。作为替代,您可以使用绝对列名。例如,tblVacDates[[Name]:[Name]]。在回答之前,我使用了以下命令:
=IF(COUNTIFS(RawData!$F$2:$F$34639;$A4;RawData!$K$2:$K$34639;“=”&EX$1)=0;“;”X”)
它可以工作,但现在速度更慢了。这张桌子快吗?我还把它换成了水平方向。实际上,我觉得速度更快。对于sumproduct,Excel在5分钟内没有响应。这样花了大约1分钟的时间,它实际上显示了计算的进度。你认为可以更快地修改它吗?@mandmi-你试过把原始数据转换成表格吗?它可以更快。我不确定。这就是我现在所拥有的;-)