You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将单元格A1中的值从单元格A2的内容中剔除?

如何从A2中剔除A1包含的数值?

嘿,这个需求其实用Excel就能轻松实现,我给你两种实用的方案,适配不同的Excel版本:


方案1:用Excel内置函数(适合2019/365及以后版本)

如果你的Excel支持TEXTJOINFILTERXML函数,直接用下面的公式就行,不需要写代码:

=TEXTJOIN(",",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(A2,",","</s><s>")&"</s></t>","//s[not(.=//s[../../../../A1])]"))

简单解释下原理:

  1. SUBSTITUTE(A2,",","</s><s>") 把A2里的逗号替换成XML标签,把1,2,3...转成1</s><s>2</s><s>3...的格式,再套上外层标签变成完整的XML结构
  2. FILTERXML 用XPath表达式筛选出不在A1拆分后的列表里的元素
  3. TEXTJOIN 把筛选后的结果用逗号重新拼接起来

如果你的单元格里有多余空格(比如2, 5, 8带空格),可以给A1和A2加个TRIM处理,修改后的公式:

=TEXTJOIN(",",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(TRIM(A2),",","</s><s>")&"</s></t>","//s[not(.=//s[../../../../TRIM(A1)])]"))

方案2:自定义VBA函数(适合旧版本Excel)

要是你的Excel版本比较老,不支持上面的函数,写个简单的自定义函数就搞定:

  1. Alt + F11 打开VBA编辑器
  2. 点击菜单栏的「插入」→「模块」,新建一个空白模块
  3. 把下面的代码粘贴进去:
Function RemoveValuesFromA2(A1 As String, A2 As String) As String
    Dim arrA1 As Variant, arrA2 As Variant
    Dim i As Integer, j As Integer
    Dim keepValues As String
    
    ' 把A1和A2的内容拆分成数组
    arrA1 = Split(A1, ",")
    arrA2 = Split(A2, ",")
    
    keepValues = ""
    
    ' 遍历A2的每个值,检查是否不在A1里
    For i = LBound(arrA2) To UBound(arrA2)
        Dim isFound As Boolean
        isFound = False
        ' 对比A1里的所有值
        For j = LBound(arrA1) To UBound(arrA1)
            ' 这里可以加Trim处理空格
            If Trim(arrA2(i)) = Trim(arrA1(j)) Then
                isFound = True
                Exit For
            End If
        Next j
        ' 如果没找到,就保留这个值
        If Not isFound Then
            If keepValues <> "" Then keepValues = keepValues & ","
            keepValues = keepValues & Trim(arrA2(i))
        End If
    Next i
    
    RemoveValuesFromA2 = keepValues
End Function
  1. 回到Excel,在需要结果的单元格里输入 =RemoveValuesFromA2(A1,A2) 就可以了!

额外提示:

  • 如果A1是空值(比如你示例里的(null)),两种方案都会直接返回A2的全部内容,完全符合你的需求
  • 要是需要处理其他分隔符,把公式或代码里的,换成对应的分隔符就行

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

火山引擎 最新活动