公式返回#VALUE! 当作为数组input时

我已经把Excel电子表格放在一起,以跟踪雇员的时间使用数组公式。 该公式适用于input为“mm / dd – mm / dd”的date范围,但是我希望它也支持单个date“mm / dd”。 但是,我获得了#VALUE! 当范围中的单元格之一是这种格式,即使公式支持这两种格式时不input数组公式支持这两种格式。

例:

在单元格B2中的值“11/28”和在B31:B37中的假期表格中,以下公式将工作天数精确地计算为1。

=SUM(IF(ISBLANK(B2),0,(IF(ISERR(FIND("-",B2)),NETWORKDAYS(B2,B2,$B$31:$B$37),NETWORKDAYS(LEFT(B2,5),MID(B2,FIND("- ",B2)+2,5),$B$31:$B$37))))) 

如果B2的值是“11/28 – 12/03”,则公式返回4。

我希望这个公式能够在每个员工的一系列单元格上工作,所以我将范围从“B2”扩展到“B2:B10”,并input如下数组公式:

 =SUM(IF(ISBLANK(B2:B10),0,(IF(ISERR(FIND("-",B2:B10)),NETWORKDAYS(B2:B10,B2:B10,$B$31:$B$37),NETWORKDAYS(LEFT(B2:B10,5),MID(B2:B10,FIND("- ",B2:B10)+2,5),$B$31:$B$37))))) 

当范围中的每个单元格为空或具有“mm / dd – mm / dd”的date范围时,此公式均可正常工作。 但是,如果其中一个单元格具有单个date“mm / dd”,则会抛出一个#VALUE! 错误。

我错过了什么?

如果给定string中没有“ – ”,那么FIND函数将返回一个#VALUE! 该string的错误。

一般来说,有两种方法来解决这些问题。 一个是包含一个错误陷阱; 另一个稍微长一点,虽然也许还是可取的(如果可能的话,通常最好避免使用IFERROR子句),就是对传递给MID和FIND的string做适当的修改,使得这个函数的组合不会出错,同时也保证了正确的结果返回。

一个这样的解决scheme(仍然是数组input)是:

 =SUM(IF(B2:B10<>"",NETWORKDAYS(LEFT(B2:B10,5),MID(B2:B10&"- "&B2:B10,FIND("- ",B2:B10&"- ")+2,5),$B$31:$B$37))) 

问候