Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 公式返回#值!当作为数组输入时_Excel_Array Formulas - Fatal编程技术网

Excel 公式返回#值!当作为数组输入时

Excel 公式返回#值!当作为数组输入时,excel,array-formulas,Excel,Array Formulas,我制作了一个Excel电子表格,用数组公式记录员工的休假时间。该公式适用于输入为“mm/dd-mm/dd”的日期范围,但我希望它也支持单个日期“mm/dd”。然而,我得到了一个#值!当区域中的一个单元格采用此格式时出错,即使该公式不作为数组公式输入时支持两种格式 例如: 根据单元格B2中的值“11/28”,以及B31:B37中的假期表,以下公式将工作日数精确计算为1 =SUM(IF(ISBLANK(B2),0,(IF(ISERR(FIND("-",B2)),NETWORKDAYS(B2,B2,$

我制作了一个Excel电子表格,用数组公式记录员工的休假时间。该公式适用于输入为“mm/dd-mm/dd”的日期范围,但我希望它也支持单个日期“mm/dd”。然而,我得到了一个#值!当区域中的一个单元格采用此格式时出错,即使该公式不作为数组公式输入时支持两种格式

例如:

根据单元格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”,并输入以下数组公式:

=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”时,此公式可以正常工作。但是,如果其中一个单元格有一个日期“mm/dd”,它会抛出一个#值!错误

我错过了什么

如果给定字符串中没有“-”,那么FIND函数将返回一个#值!该字符串的错误

一般来说,有两种方法可以解决此类问题。一个是包括一个错误陷阱;另一个稍长但可能更可取的方法(如果可能,通常最好避免使用IFERRO子句)是对传递给MID的字符串进行适当的修改,并发现这样的函数组合不会出错,同时也确保返回正确的结果

一个这样的解决方案(仍然输入数组)是:

=总和(如果(B2:B10“”),网络天数(左(B2:B10,5),中间(B2:B10&“-”&B2:B10,查找(“-”,B2:B10&“-”)+2,5),$B$31:$B$37)))

问候

感谢您的巧妙解决方案;这解决了我眼前的问题。然而,我仍然不明白为什么我在OP中使用FIND不会在标准函数中抛出错误。它仅在输入数组时出错。抱歉。我没有注意到你实际上有一个适当的错误子句。在这种情况下,原因更为复杂:即if(ISERR…语句的value_if_true子句没有受到足够的强制,无法对值数组进行操作(有时数组条目本身是不够的:如果感兴趣,请参阅此处了解更多信息:).我只想说,对数字的简单强制就足够了:…如果(ISER(FIND(“-”,B2:B10)),网络日(0+B2:B10,0+B2:B10,…等等。感谢您的解释、链接和数字强制方法。所有这些都非常有用!
=SUM(IF(B2:B10<>"",NETWORKDAYS(LEFT(B2:B10,5),MID(B2:B10&"- "&B2:B10,FIND("- ",B2:B10&"- ")+2,5),$B$31:$B$37)))