如何将单元格A1中的值从单元格A2的内容中剔除?
如何从A2中剔除A1包含的数值?
嘿,这个需求其实用Excel就能轻松实现,我给你两种实用的方案,适配不同的Excel版本:
方案1:用Excel内置函数(适合2019/365及以后版本)
如果你的Excel支持TEXTJOIN和FILTERXML函数,直接用下面的公式就行,不需要写代码:
=TEXTJOIN(",",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(A2,",","</s><s>")&"</s></t>","//s[not(.=//s[../../../../A1])]"))
简单解释下原理:
SUBSTITUTE(A2,",","</s><s>")把A2里的逗号替换成XML标签,把1,2,3...转成1</s><s>2</s><s>3...的格式,再套上外层标签变成完整的XML结构FILTERXML用XPath表达式筛选出不在A1拆分后的列表里的元素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版本比较老,不支持上面的函数,写个简单的自定义函数就搞定:
- 按
Alt + F11打开VBA编辑器 - 点击菜单栏的「插入」→「模块」,新建一个空白模块
- 把下面的代码粘贴进去:
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
- 回到Excel,在需要结果的单元格里输入
=RemoveValuesFromA2(A1,A2)就可以了!
额外提示:
- 如果A1是空值(比如你示例里的
(null)),两种方案都会直接返回A2的全部内容,完全符合你的需求 - 要是需要处理其他分隔符,把公式或代码里的
,换成对应的分隔符就行
内容的提问来源于stack exchange,提问作者Sebastian Haus




