You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Microsoft 365中对比单元格文本并提取差异至第三列(无需VBA)

无VBA提取两单元格文本差异(Microsoft 365)

问题说明

SUBSTITUTE(A2,B2,"")仅能替换完全匹配的整段文本,无法逐段/逐字符对比两个字符串的差异,因此不符合需求。以下提供两种实现方式:


方法1:逐字符提取差异(适合单字符替换场景)

使用动态数组函数组合,逐个对比两个字符串的字符,提取B中与A不同的字符:

=TEXTJOIN(",",TRUE,IF(MID(B2,SEQUENCE(LEN(B2)),1)<>IFERROR(MID(A2,SEQUENCE(LEN(B2)),1),""),MID(B2,SEQUENCE(LEN(B2)),1),""))

逻辑说明:

  • SEQUENCE(LEN(B2))生成对应B文本长度的序列,用于逐个提取字符
  • MID(B2,SEQUENCE(LEN(B2)),1)提取B的每个字符
  • IFERROR(MID(A2,SEQUENCE(LEN(B2)),1),"")提取A的每个字符,A长度不足时补空
  • 对比字符,保留B中与A不同的字符,最后用逗号连接所有差异字符

方法2:提取连续差异块(匹配示例需求)

如果需要将连续的差异内容作为一个整体(如示例中把are作为单个差异块),可以用Power Query实现:

  1. 选中数据区域(A1:C1表头+数据行),点击「数据」选项卡→「从表格/区域」(勾选「我的表格有标题」)
  2. 在Power Query编辑器中,添加自定义列,公式为:
let
    TextA = [Column A],
    TextB = [Column B],
    // 找最长公共前缀长度
    PreLen = List.Max(List.Transform({1..List.Min({Text.Length(TextA), Text.Length(TextB)})}, (x)=> if Text.Start(TextA,x)=Text.Start(TextB,x) then x else 0)),
    // 找最长公共后缀长度
    SufLen = List.Max(List.Transform({1..List.Min({Text.Length(TextA), Text.Length(TextB)})}, (x)=> if Text.End(TextA,x)=Text.End(TextB,x) then x else 0)),
    // 提取中间差异
    MidDiff = Text.Range(TextB, PreLen, Text.Length(TextB)-PreLen-SufLen),
    // 提取B额外的尾部内容
    ExtraDiff = if Text.Length(TextB) > Text.Length(TextA) then Text.End(TextB, Text.Length(TextB)-(Text.Length(TextA)-SufLen)) else "",
    // 合并差异
    Result = Text.Combine(List.RemoveNulls({MidDiff, ExtraDiff}), ",")
in
    Result
  1. 点击「关闭并上载」,结果会自动加载到新工作表中,后续数据更新时右键刷新即可。

内容的提问来源于stack exchange,提问作者jajangjaras

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 10:06:01