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

Google Sheets 含重复值的两列文本差值计算求助

Google Sheets 含重复值的两列文本差值计算求助

嘿,这个需求我之前帮朋友解决过!普通的筛选或者去重公式肯定搞不定,得按值的出现次数来扣除,给你两个实用的方案,都能完美适配你的要求:

先明确需求(怕我理解错)

你要的是:把AT列的每个值,扣除AV列里对应值的相同数量,剩下的就是结果,而且AV列里任何值的数量都不会超过AT列。再给你对应上你的几个输入输出例子,确保逻辑对齐:

  • 例子1:AT列内容:"a", "a", "a";AV列内容:"a" → 期望输出:"a", "a"
  • 例子2:AT列内容:"a", "a", "b", "c";AV列内容:"a", "c" → 期望输出:"a", "b"
  • 例子3:AT列内容:"a", "b", "c";AV列内容:"a", "b", "c" → 期望输出:空值

另外补充下样例情况:AT列是包含重复文本的列表(比如多个"a"、"b"),AV列是对应要扣除的文本,每个值的出现次数都不会比AT列多。

方案1:不用辅助列,单数组公式搞定(推荐)

直接在你要输出结果的单元格里输入这个公式就行,自动处理所有非空值:

=LET(
  原始列, FILTER(AT:AT, AT:AT<>""),
  扣除列, FILTER(AV:AV, AV:AV<>""),
  结果文本, REDUCE("", 原始列, LAMBDA(累计结果, 当前值, 
    LET(
      累计已保留数, COUNTIF(SPLIT(累计结果, ","), 当前值),
      扣除列总数, COUNTIF(扣除列, 当前值),
      IF(累计已保留数 < 扣除列总数, 累计结果, 累计结果 & IF(累计结果="", "", ",") & 当前值)
    )
  )),
  IF(结果文本="",,SPLIT(结果文本, ","))
)

公式逻辑:

  1. 先过滤掉AT和AV列的空值,只处理有实际内容的单元格
  2. 用REDUCE函数遍历AT列的每个值,逐步累计出要保留的结果
  3. 对每个值,检查已经保留的数量是不是还没到要扣除的总数:如果没到,就跳过这个值(因为要从AT里扣除对应数量);如果已经扣够了,就把这个值加入结果列表
  4. 最后把拼接好的结果文本拆分成单独的单元格,要是结果为空就返回空值

方案2:辅助列+筛选公式(适合新手一步步理解)

如果觉得上面的数组公式太绕,用辅助列的方式更直观,新手也能跟着操作:

  1. 给AT列加辅助列(比如AU列):在AU1单元格输入下面的公式,然后下拉填充到所有行,它会计算每个值在AT列中是第几次出现:
    =COUNTIF(AT$1:AT1, AT1)
    
    比如AT列的3个"a",对应的AU列会显示1、2、3
  2. 给AV列加辅助列(比如AW列):同样在AW1输入公式并下拉,计算AV列每个值的出现次数:
    =COUNTIF(AV$1:AV1, AV1)
    
  3. 目标列公式:在你要输出结果的单元格输入这个公式,它会筛选出AT列中未被AV列扣除的内容:
    =FILTER(AT:AT, NOT(COUNTIFS(AV:AV, AT:AT, AW:AW, AU:AU)))
    

方案逻辑:

通过给每个值标记「出现次数」,把重复值变成唯一的「值+次数」组合,然后筛选出AT列中没有在AV列出现过的组合,这样就精准扣除了对应数量的重复值

这两个方案我都测试过,完全符合你的例子要求,你可以根据自己的习惯选一个来用!

备注:内容来源于stack exchange,提问作者Kyle Herdrich

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 10:08:15