用Excel公式获取子集最后项,标记最后购笔客户的所有交易
解决方案:标记最后一次购买为笔(编码333)的客户所有交易
既然你的数据已经按CustomerID和ServiceDate排好序,每个客户的最新交易在其记录组的末尾,那我们可以利用这个排序特性,精准定位每个客户的最后一笔商品编码,再判断是否为333,进而标记该客户的所有交易。
方法1:用LOOKUP函数(兼容多数Excel版本)
假设你的CustomerID在A列,商品编码在D列,要在E列做标记,在E2单元格输入以下公式,然后下拉填充:
=IF(LOOKUP(2,1/(A$2:A$1000=A2),D$2:D$1000)=333,"标记","")
公式解释:
A$2:A$1000=A2:生成一个逻辑数组,当前行客户ID匹配的位置返回TRUE,其余为FALSE1/(...):把TRUE转成1,FALSE转成#DIV/0!错误值LOOKUP(2,1/(...),D$2:D$1000):LOOKUP会忽略错误值,找比2小的最后一个有效值(也就是该客户最后一笔交易对应的位置),返回对应的商品编码- 最后判断这个编码是否等于333,是则显示“标记”,否则留空
方法2:用XLOOKUP函数(Excel 365/2021及以上版本)
如果你的Excel支持动态数组函数,XLOOKUP会更直观,同样在E2输入:
=IF(XLOOKUP(A2,A:A,D:D,,0,-1)=333,"标记","")
公式解释:
XLOOKUP(A2,A:A,D:D,,0,-1):参数-1表示从后往前查找,直接返回当前客户最后一笔交易的商品编码- 后续判断逻辑和方法1一致,简单易懂
关于你提到的COUNTA的补充
你之前用=INDEX(C:C,COUNTA(C:C))能取整列最后值,但这是针对整列的统计。要针对每个客户的子集操作,就需要像上面这样用LOOKUP/XLOOKUP这类能按条件定位组内最后一条记录的函数,而不是整列的COUNTA——毕竟COUNTA没法区分不同客户的记录组。
内容的提问来源于stack exchange,提问作者SkysLastChance
相关产品推荐
相关产品推荐

