Excel公式问题:查找最后出现最早的名称时返回#N/A
Excel公式解决:查找最后出现位置最早的重复/唯一名称
问题分析
你原公式的问题在于仅筛选了仅出现一次的名称(COUNTIF($C$2:C50, $C$2:C50)=1),完全忽略了重复名称的最后出现行号。当区域里存在重复名称时,MIN函数找不到符合条件的行号,自然返回#N/A。
你的核心需求是:获取C2:C50中每个名称的最后出现行号,再找出这些行号里最小的那个对应的名称。
解决方案
方案1:适用于Excel 365/2021(支持动态数组)
直接在C51输入以下公式(无需按组合键):
=INDEX(C2:C50,XMATCH(MIN(XLOOKUP(C2:C50,C2:C50,ROW(C2:C50),,,-1)),ROW(C2:C50)))
公式拆解:
XLOOKUP(C2:C50,C2:C50,ROW(C2:C50),,,-1):对每个单元格,返回对应名称最后一次出现的行号MIN(...):从所有名称的最后出现行号中,找出最小的那个(即最后出现位置最早的)XMATCH(...,ROW(C2:C50)):定位这个最小行号在C2:C50区域中的位置INDEX(...):返回对应位置的名称
方案2:适用于旧版Excel(不支持动态数组)
在C51输入以下公式后,按Ctrl+Shift+Enter执行数组运算:
=INDEX(C2:C50,MATCH(MIN(MAX(ROW(C2:C50)*(C2:C50=TRANSPOSE(C2:C50)))),ROW(C2:C50),0))
公式拆解:
C2:C50=TRANSPOSE(C2:C50):生成一个矩阵,标记出相同名称的位置ROW(C2:C50)*(...):将行号与矩阵相乘,相同名称的位置保留对应行号,其他为0MAX(...):对每个名称,提取其最大行号(即最后出现行号)MIN(...):找出所有最后出现行号里的最小值MATCH(...)+INDEX(...):定位并返回对应名称
内容的提问来源于stack exchange,提问作者Faraz Ahmed
相关产品推荐
相关产品推荐

