Excel查找指定行最后一个非零值对应列号的公式问题求解
问题原因及解决方案
公式返回结果不符合预期的原因
- 你使用的两个公式返回的45是工作表全局绝对列号:O列的全局列号为15,BA列的全局列号为53,45完全在O~BA的列号范围内,本身计算逻辑没有问题。
- 你提到的39是O~BA列的总宽度,不是该范围的最大全局列号,你预期得到的31是以O列为第1位的相对列号,只需要对现有公式结果做偏移修正即可。
- 数值验证:公式返回的全局列号45减去O列之前的14列,刚好等于你提到的正确相对列号31,验证了现有公式计算的正确性。
修正后的列号查询公式
如果需要得到以O列为第1位的相对列号,使用以下公式即可:
数组公式版本(Excel 365/2021及以上可直接回车执行,旧版本需按Ctrl+Shift+Enter触发数组计算)
=MAX((O8:BA8<>0)*(COLUMN(O8:BA8))) - COLUMN(O8) + 1
兼容旧版本的SUMPRODUCT版本(无需数组回车)
=SUMPRODUCT(MAX((O8:BA8<>0)*COLUMN(O8:BA8))) - COLUMN(O8) + 1
直接查询最后登记工时日期的简化方案
你最终需求是获取最后一次登记工时对应的日期,无需额外转换列号,假设O7到BA7行是对应列的日期表头,直接使用以下兼容性更强的公式即可:=LOOKUP(1,0/(O8:BA8>0),O$7:BA$7)
公式逻辑说明:先通过O8:BA8>0筛选出所有有工时登记的单元格,再通过LOOKUP忽略错误值的特性,匹配最后一个符合条件的单元格,直接返回对应列的日期值。
内容的提问来源于stack exchange,提问作者Samantha Stephenson
相关产品推荐
相关产品推荐

