如何在Excel中用内置公式识别带拼写错误的自定义唯一值?
可以用Excel内置公式实现(适用于Excel 365/2021及以上版本)
假设你的数据存储在A列(比如A1:A7),可以通过组合动态数组函数实现需求:过滤掉那些存在"出现次数更多、字符差异小于3"的其他值的条目,最终保留正确的唯一值。
具体公式
=FILTER(UNIQUE(A:A),BYROW(UNIQUE(A:A),LAMBDA(x,LET( cntX,COUNTIF(A:A,x), otherVals,FILTER(UNIQUE(A:A),UNIQUE(A:A)<>x), otherCnts,COUNTIF(A:A,otherVals), charDiffs,BYROW(otherVals,LAMBDA(y, ABS(LEN(x)-LEN(y)) + SUM(--(MID(x,SEQUENCE(MIN(LEN(x),LEN(y))),1)<>MID(y,SEQUENCE(MIN(LEN(x),LEN(y))),1)) )), NOT(OR((otherCnts>cntX)*(charDiffs<3))) ))))
公式逻辑拆解
- 获取原始唯一值:
UNIQUE(A:A)提取所有不重复条目,包括拼写错误内容。 - 遍历每个唯一值:通过
BYROW+LAMBDA逐个处理每个唯一值x:cntX:计算x在原数据中的出现次数。otherVals:提取除x外的其他所有唯一值。otherCnts:计算这些其他值的出现次数。charDiffs:计算x与每个其他值的字符差异数(长度差绝对值 + 对应位置不同字符数)。- 过滤判断:如果不存在"出现次数比
x多且字符差异小于3"的其他值,就保留x;否则过滤掉x。
测试验证
针对你提供的示例数据:{"Apple", "Applee", "Orange", "Orange", "Orang", "Banana", "Apple"}
公式会自动过滤掉Applee(存在出现次数更多的Apple,差异为1)和Orang(存在出现次数更多的Orange,差异为1),最终返回{"Apple", "Orange", "Banana"},完全符合需求。
注意事项
- 该公式依赖Excel 365/2021及以上版本的动态数组和
LAMBDA系列函数,旧版Excel(如2019及更早)无法直接使用。 - 当前字符差异计算逻辑为"长度差+对应位置不同字符数",已能覆盖常见的拼写错误场景;若需要更精准的标准编辑距离(插入/删除/替换),可调整
charDiffs的计算逻辑。
内容的提问来源于stack exchange,提问作者Marci
相关产品推荐
相关产品推荐

