如何获取工作量矩阵中最后一个非零值对应的周数?
解决多行工时区域中获取最后完成周数的问题
你的公式报错是因为LOOKUP要求查找向量和结果向量必须是单行或单列,而B2:AM33是多行区域,不符合要求。下面提供几种可行的解决方案:
方法1:用INDEX+MAX+IF(兼容新旧Excel)
这个公式会先找出所有包含非零工时的列号,取最大的那个(也就是最后一列),再返回对应周数:
=INDEX(B1:AM1,,MAX(IF(B2:AM33>0,COLUMN(B2:AM33)-COLUMN(B1)+1)))
- 注意:如果是Excel 2019及更早版本,输入完公式后需要按
Ctrl+Shift+Enter触发数组计算;新版Excel会自动识别数组公式,直接回车即可。
方法2:用XLOOKUP(Excel 365/2021及以上)
如果你的Excel支持XLOOKUP,这个公式更直观,它会从后往前查找第一个存在非零工时的列,返回对应周数:
=XLOOKUP(TRUE,MMULT(--(B2:AM33>0),ROW(B2:B33)^0)>0,B1:AM1,,0,-1)
这里MMULT(--(B2:AM33>0),ROW(B2:B33)^0)的作用是把每列的多行数据合并成一个判断值:只要该列有任意一个单元格>0,结果就会大于0,这样就把多行区域转换成了和周数行对应的单行判断数组。
方法3:改造LOOKUP公式(适配多行区域)
你可以先把多行的非零判断转换成单行,再用LOOKUP:
=LOOKUP(2,1/(MMULT(--(B2:AM33>0),ROW(B2:B33)^0)>0),B1:AM1)
原理和方法2类似,MMULT将每列的多行条件合并为一个单行的布尔数组,这样就满足了LOOKUP对单行向量的要求,实现从后往前找最后一个符合条件的周数。
内容的提问来源于stack exchange,提问作者Frank Evers
相关产品推荐
相关产品推荐

