如何修改条件格式公式以高亮仅差一个字符的近似重复项?
高亮近似重复项(仅非首次出现)的解决方案
针对你需要的「标记仅相差一个字符的近似重复项,且只高亮第2次及以后出现的项」的需求,可按以下步骤实现:
1. 新增自定义编辑距离计算函数
Google Sheets没有内置工具直接计算字符串间的字符差异度,我们需要先创建一个自定义函数来计算Levenshtein编辑距离(该距离表示将一个字符串转换成另一个字符串所需的最少单字符编辑次数,≤1即符合你的近似重复要求):
- 打开表格,点击顶部「扩展」→「Apps 脚本」
- 清空编辑器默认代码,粘贴如下JavaScript代码:
function LEVENSHTEIN(a, b) { if (!a || !b) return (a || b).length; const matrix = Array.from({ length: b.length + 1 }, () => Array(a.length + 1).fill(0)); for (let i = 0; i <= a.length; i++) matrix[0][i] = i; for (let j = 0; j <= b.length; j++) matrix[j][0] = j; for (let j = 1; j <= b.length; j++) { for (let i = 1; i <= a.length; i++) { const cost = a[i - 1] === b[j - 1] ? 0 : 1; matrix[j][i] = Math.min( matrix[j - 1][i] + 1, // 删除字符 matrix[j][i - 1] + 1, // 插入字符 matrix[j - 1][i - 1] + cost // 替换字符 ); } } return matrix[b.length][a.length]; }
- 点击编辑器顶部「保存」,给项目命名(比如
ApproximateDuplicateChecker),按提示完成授权(首次运行需要授权脚本访问表格)。
2. 设置条件格式规则
选中需要应用高亮的单元格范围(比如A2:A):
- 点击顶部「格式」→「条件格式」
- 在右侧面板中选择「自定义公式」,输入以下公式:
=ARRAYFORMULA(SUM(--(BYROW(A$2:$A2, LAMBDA(x, LEVENSHTEIN(x, $A2) <= 1)))) > 1)
- 设置你需要的高亮样式(比如填充色),点击「完成」。
公式逻辑拆解
LEVENSHTEIN(x, $A2) <= 1:判断当前单元格$A2与上方(含自身)的每个单元格x是否仅相差1个字符(增、删、改、空格差异都算)。BYROW(...):遍历A$2:$A2范围内的所有单元格,返回每个单元格的判断结果(布尔值)。--(...):将布尔值转为1(符合近似重复)或0(不符合)。SUM(...):统计到当前行为止,与当前单元格近似重复的总次数。>1:总次数超过1意味着当前单元格不是首次出现的近似项,触发高亮。
内容的提问来源于stack exchange,提问作者Damien
相关产品推荐
相关产品推荐

