我正在使用 Excel 在时间表中搜索多天(我的范围)的HLOOKUP
不同部门的多名员工的工作时间(我读取的是部门编号以下的值)。
我想出了以下公式,它适用于我的工作表的大多数内容,除非在第一个范围 ($B$9:$E$10) 中找不到查找单元格 (AB9) 值。对于其他内容,它有效(如果在后面的范围中找不到该值,则不会返回 #N/A),但前提是第一个范围中找不到该值。
=SUM(IF(COUNTIF($B$9:$E$10,AB9),HLOOKUP(AB9,$B$9:$E$10,2,FALSE),""))+(IF(COUNTIF($F$9:$I$10,AB9),HLOOKUP(AB9,$F$9:$I$10,2,FALSE),""))+(IF(COUNTIF($J$9:$M$10,AB9),HLOOKUP(AB9,$J$9:$M$10,2,FALSE),""))+(IF(COUNTIF($N$9:$Q$10,AB9),HLOOKUP(AB9,$N$9:$Q$10,2,FALSE),""))+(IF(COUNTIF($R$9:$U$10,AB9),HLOOKUP(AB9,$R$9:$U$10,2,FALSE),""))+(IF(COUNTIF($V$9:$Y$10,AB9),HLOOKUP(AB9,$V$9:$Y$10,2,FALSE),""))
有人能向我解释为什么这会失败吗?如果我不应该使用 COUNTIF,我还应该使用什么以及为什么。
理想情况下,我会用公式在范围内寻找唯一的数字(部门),报告它们,然后在下面列出每个部门的工作时间 - 但这有点超出我的专业知识(目前)!;)
答案1
Excel 公式处理特殊错误值 #N/A 和 #DIV/0 的方式与其他(实际)值不同。根据您使用的公式,无论它们出现在哪里,它们都会作为结果返回。因此,当 HLOOKUP 找不到该值时,它会返回 #N/A,即使您尝试跳过 IF 语句中的 HLOOKUP 求值并仅返回“”,Excel 仍会对其进行求值,并在求值后立即返回 #N/A。
此外,因为您处理的是值而不是文本,所以返回值应该是 0 而不是“”。
您应该使用以下语句,而不是每个 SUM 中的外部 IF 语句伊斯兰会议组织如下:
IFNA(HLOOKUP(AB9,$B$9:$E$10,2,FALSE),0)
如果 IFNA 公式确实有效并产生了值,则返回第一个参数中的值,如果无效,则返回“”。
提供的链接有一个示例工作表,展示了它如何与 VLOOKUP 配合使用,因此您可以测试该公式。根据那里的示例,这正是您想要使用 IFNA 的情况。
因此,如果我读懂了您尝试正确执行的操作,则整个公式应该是:
=SUM(IFNA(HLOOKUP(AB9,$B$9:$E$10,2,FALSE),0),IFNA(HLOOKUP(AB9,$F$9:$I$10,2,FALSE),""),IFNA(HLOOKUP(AB9,$J$9:$M$10,2,FALSE),""),IFNA(HLOOKUP(AB9,$N$9:$Q$10,2,FALSE),""),IFNA(HLOOKUP(AB9,$R$9:$U$10,2,FALSE),""),IFNA(HLOOKUP(AB9,$V$9:$Y$10,
答案2
我和一位同事想出了一个比将所有 IF 嵌套在一起更好的解决方案。
我们想出了=SUMIF($B7:$AI7,AB9,$B8:$AI8)
更好的方法,因为不需要多个嵌套IF
。
我进一步扩展了它,允许设置默认部门,并包括 S(病假)和 H(假期)时间,这增加了默认部门的总工作时间。
=SUMIF($B7:$AI7,AL7,$B8:$AI8)+IF($AJ7=AL7,SUMIF($B7:$AI7,"S",$B8:$AI8)+SUMIF($B7:$AI7,"H",$B7:$AI7),0)
我会更进一步,接下来会包括小时工资和加班费。祝我好运!