求助:无需VBA的Excel单元格文本处理公式(含特殊字符)
解决方案
方法1:基础替换(针对单一中间项)
如果仅需要处理Đ198,-,这一个中间冗余项,直接用嵌套SUBSTITUTE即可完成:
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"!",""),"*",""),"Đ198,-,","")
- 第一层
SUBSTITUTE:全局删除所有!字符 - 第二层
SUBSTITUTE:全局删除所有*字符 - 第三层
SUBSTITUTE:删除指定的中间冗余片段
方法2:通用处理(支持多中间项+保留所有内容)
如果存在多个类似的中间冗余项,或者需要更通用的逻辑,结合FILTERXML、TEXTJOIN和REDUCE实现批量处理:
=REDUCE( TEXTJOIN(",",1,SUBSTITUTE(SUBSTITUTE(FILTERXML("<t><s>" & SUBSTITUTE(A1,",","</s><s>") & "</s></t>","//s"),"!",""),"*","")), {"Đ198,-,","ĐXXX,-,"}, // 替换为你需要删除的所有中间冗余片段 LAMBDA(result, item, SUBSTITUTE(result, item, "")) )
逻辑说明:
- 用
SUBSTITUTE(A1,",","</s><s>")将原文本按逗号分割为XML标签结构 FILTERXML提取所有分割后的元素- 双层
SUBSTITUTE清除所有!和*字符 TEXTJOIN将处理后的元素重新用逗号连接REDUCE批量替换所有需要删除的中间冗余项(可在数组中添加更多目标片段)
方法3:连续数字范围自动简化(可选)
如果冗余中间项都是连续数字的Đ项(比如Đ198夹在Đ197和Đ199之间),可通过数字规律自动过滤:
=TEXTJOIN(",",1,LET( arr, SUBSTITUTE(SUBSTITUTE(FILTERXML("<t><s>" & SUBSTITUTE(A1,",","</s><s>") & "</s></t>","//s"),"!",""),"*",""), filtered, FILTER(arr, NOT(AND(LEFT(arr,2)="Đ", ISNUMBER(MID(arr,3,10)+0), XMATCH(MID(arr,3,10)+1, MID(arr,3,10))>0, XMATCH(MID(arr,3,10)-1, MID(arr,3,10))>0))), filtered ))
该公式会自动识别并过滤掉处于两个连续数字Đ项之间的中间冗余项。
内容的提问来源于stack exchange,提问作者D.Moore
相关产品推荐
相关产品推荐

