ARTICLE · 1337052
Excel VBA 自定义函数 CellDiff,一键对比两个文本差异
Excel VBA 自定义函数 CellDiff,一键对比两个文本差异使用EXACT函数或者IF函数对比两个文本串可以得出两个文本串是否一致。只能告诉你有没有差别,看不到到底哪里不一样,长文本核对起来只能逐字肉眼查找,非常容易漏看,效率很低。如果你想要得到具体是哪里不一致要怎么办? 今天分享一个VBA 自定义函数 CellDiff,一键对比两个文本串具体的差异。它会自动忽略所有相同的内容,只提取中间不一样的内容,直观展示两边的差异。 一、函数核心功能详解 函数语法: 参数说明:
三、实操案例 四、VBA代码 往前精彩推荐: VBA自定义函数 MultiShtCell 一键跨表取值 Excel/WPS自定义函数【CountAdd】一键统计 VBA自定义函数GetTopFrequency:一键提取出现频率最高的前 N 项 Excel 自定义函数GetKeyword按关键字截取固定长度文本,支持去重溢出
✅ 功能简述 CellDiff 用于对比两段文本字符串,自动识别两者相同的前缀、相同的后缀,剔除前后一致的部分,只返回中间存在差异的内容。
✅ 解决痛点
原生 Excel 没有可以直接提取文本差异的内置函数 不只是简单返回 “相同 / 不同”,直接展示差异内容,一眼看懂改动点; 自动屏蔽前后一致文字,不会把整串文本全部输出,结果简洁干净;
✅ 逻辑说明
如果两段文本完全一致:直接返回“相同”; 两边都有差异:格式为“ 旧内容 → 新内容”;仅第一段多出内容:只输出第一段差异; 仅第二段多出内容:只输出第二段差异。
二、函数语法与参数说明
CellDiff (文本1,文本2) 关注
重播 分享 赞
Function CellDiff(文本1 As String, 文本2 As String) As StringDim i As Long, j As LongDim prefixLen As Long, suffixLen As LongDim len1 As Long, len2 As LongDim diff1 As String, diff2 As StringIf 文本1 = 文本2 ThenCellDiff = "相同"Exit FunctionEnd Iflen1 = Len(文本1)len2 = Len(文本2)prefixLen = 0For i = 1 To len1If prefixLen >= len2 Then Exit ForIf mid(文本1, i, 1) = mid(文本2, i, 1) ThenprefixLen = prefixLen + 1ElseExit ForEnd IfNext isuffixLen = 0For i = 0 To len1 - prefixLen - 1If suffixLen >= len2 - prefixLen Then Exit ForIf mid(文本1, len1 - i, 1) = mid(文本2, len2 - i, 1) ThensuffixLen = suffixLen + 1ElseExit ForEnd IfNext idiff1 = mid(文本1, prefixLen + 1, len1 - prefixLen - suffixLen)diff2 = mid(文本2, prefixLen + 1, len2 - prefixLen - suffixLen)If diff1 <> "" And diff2 <> "" ThenCellDiff = diff1 & " → " & diff2ElseIf diff1 <> "" ThenCellDiff = diff1ElseCellDiff = diff2End IfEnd Function
五、使用方法
打开 Excel,按 Alt+F11打开 VBA 编辑器;右键工作表→插入→模块; 复制本文的 VBA 函数代码,粘贴到模块中; 关闭 VBA 编辑器,返回表格即可直接使用公式















































































