基于Levenshtein距离匹配比对字符串的Excel实现问题
无宏Excel实现Levenshtein距离匹配与百分位展示
核心结论
可以在无宏的Excel(365/2021及以上版本)中实现需求,且支持200+字符的字符串处理,以下是分步实现方案:
1. 定义无宏Levenshtein距离函数
用Excel内置的LAMBDA函数创建自定义距离计算工具,无需VBA宏:
- 打开「公式」选项卡 → 「名称管理器」→ 「新建」
- 名称设为
LevDist,引用位置粘贴以下公式:
=LAMBDA(a,b, LET( lenA,LEN(a), lenB,LEN(b), matrix,MAKEARRAY(lenA+1,lenB+1,LAMBDA(r,c,IF(r=1,c-1,IF(c=1,r-1,"")))), calcMatrix,REDUCE(matrix,SEQUENCE(lenA),LAMBDA(mat,i, REDUCE(mat,SEQUENCE(lenB),LAMBDA(m,j, LET( cost,IF(MID(a,i,1)=MID(b,j,1),0,1), val,MIN(INDEX(m,i,j+1)+1,INDEX(m,i+1,j)+1,INDEX(m,i,j)+cost), INDEX(m,i+1,j+1,val) ) )) ), INDEX(calcMatrix,lenA+1,lenB+1) ) )
- 确定后,即可用
=LevDist(字符串1, 字符串2)直接计算编辑距离。
2. 匹配最相似的模板字符串
假设:
- 模板字符串存于
模板表!A2:A100(A1为表头) - 当前填充字符串在
填充表!A2
在填充表!B2输入公式,获取最匹配的模板:
=INDEX(模板表!A:A,XMATCH(MIN(BYROW(模板表!A2:A100,LAMBDA(x,LevDist(A2,x)))),BYROW(模板表!A2:A100,LAMBDA(x,LevDist(A2,x))),0))
下拉填充即可批量处理所有填充字符串。
3. 计算距离的百分位数
- 先在
填充表!C2计算当前填充字符串与匹配模板的距离:
=LevDist(A2,B2)
- 在
填充表!D2计算该距离的百分位数(返回0-1的数值,乘100可转为百分比):
=PERCENTRANK.INC($C:$C,C2,2)
- 第三个参数
2表示保留2位小数,可按需调整。
关于200+字符的支持
Excel 365/2021的LAMBDA及相关函数对200+字符的字符串处理完全兼容,仅会随字符串长度增加有轻微计算延迟,日常200字符量级无明显影响。
内容的提问来源于stack exchange,提问作者Max Singer
相关产品推荐
相关产品推荐

