如何使用=FILTER函数仅对单列去重并保留最后出现的行
解决方案:用FILTER函数对B列去重并保留最后一行
原始数据
| A列 | B列 | C列 |
|---|---|---|
| a | z | ba |
| b | c | ba |
| d | w | vo |
| g | z | ba |
期望结果
| A列 | B列 | C列 |
|---|---|---|
| b | c | ba |
| d | w | vo |
| g | z | ba |
正确公式
在Excel 365或支持动态数组的版本中,使用以下公式:
=FILTER(A2:C5, ROW(A2:C5)=BYROW(B2:B5, LAMBDA(val, MAX(IF(B2:B5=val, ROW(B2:B5))))))
公式逻辑说明
BYROW(B2:B5, LAMBDA(val, MAX(IF(B2:B5=val, ROW(B2:B5))))):遍历B列每个值,计算该值在B列中最后出现的行号ROW(A2:C5)=[上述结果]:生成布尔数组,标记哪些行是对应B列值的最后出现行FILTER(A2:C5, [布尔数组]):根据标记筛选出符合条件的整行数据
为什么之前的公式无效
=UNIQUE(B2:B5):仅返回B列去重后的值,无法关联A、C列的对应数据=FILTER(A2:C5,UNIQUE(B2:B5)=B2:B5):UNIQUE返回的是去重后的列表,和原B列匹配时只会匹配到每个值的第一次出现,而非最后一次,因此无法得到期望结果
内容的提问来源于stack exchange,提问作者user21307686
相关产品推荐
相关产品推荐

