电子表格行末有效数据提取及Delivered值优先显示需求问询
嘿,我来帮你搞定这个电子表格的需求!根据你的描述,我们需要实现两个核心逻辑:优先识别行内是否存在"Delivered"事件,存在则直接显示它;如果没有,再提取该行最后一个非空的事件。下面针对常用的Excel和Google Sheets分别给出具体的公式方案:
Excel 解决方案
适用于Excel 365/2021(支持动态数组)
直接用XLOOKUP配合COUNTIF就能一步到位,把下面的公式放到"Last"列的第一个数据行(比如F2),然后下拉填充即可:
=IF(COUNTIF(B2:E2,"Delivered")>0,"Delivered",XLOOKUP("*",B2:E2,B2:E2,"",0,-1))
COUNTIF(B2:E2,"Delivered")>0:检查当前行的事件列(这里是B2到E2)是否包含"Delivered",是的话直接返回该文本XLOOKUP("*",B2:E2,B2:E2,"",0,-1):用通配符*匹配任意非空内容,最后一个参数-1表示从右往左搜索,直接定位到最后一个非空单元格
适用于旧版Excel(不支持XLOOKUP)
用LOOKUP函数替代,公式如下:
=IF(COUNTIF(B2:E2,"Delivered")>0,"Delivered",LOOKUP(2,1/(B2:E2<>""),B2:E2))
1/(B2:E2<>""):把非空单元格转换为1,空单元格转换为错误值#DIV/0!LOOKUP(2,1/(B2:E2<>""),B2:E2):因为2比所有1都大,LOOKUP会自动匹配最后一个有效的1对应的单元格值,也就是最后一个非空事件
Google Sheets 解决方案
Google Sheets的逻辑和Excel一致,两种公式都适用:
推荐方案(用XLOOKUP)
=IF(COUNTIF(B2:E2,"Delivered")>0,"Delivered",XLOOKUP("*",B2:E2,B2:E2,"",0,-1))
兼容方案(用LOOKUP)
=IF(COUNTIF(B2:E2,"Delivered")>0,"Delivered",LOOKUP(2,1/(B2:E2<>""),B2:E2))
示例验证
用你给出的测试数据验证(假设事件列是B-E,Last列是F):
| ev1 | ev2 | ev3 | ev4 | Last | |
|---|---|---|---|---|---|
| A | A1 | A2 | A3 | NA | A3 |
| B | B1 | B2 | NA | NA | B2 |
| C | C1 | C2 | C3 | C4 | C4 |
| D | D1 | D2 | D3 | NA | D3 |
| E | E1 | NA | NA | NA | E1 |
| F | F1 | Delivered | F3 | NA | Delivered |
把公式放到F2后下拉,就能得到上面的结果啦!
内容的提问来源于stack exchange,提问作者Vic Sh
相关产品推荐
相关产品推荐

