Excel 2016提取单元格内多次出现@前文本的方案求助
Excel 2016:提取所有@符号前的内容(最多3次)
公式解法(优先)
方案1:使用TEXTJOIN(Excel 2016支持)
该公式自动处理最多3次@的情况,跳过空值并拼接结果:
=TEXTJOIN(", ",TRUE, IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B3,1,FIND("@",B3)-1),"(",REPT(" ",100)),100)),""), IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B3,FIND("@",B3)+1,LEN(B3)),"(",REPT(" ",100)),100)),""), IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B3,FIND("@",B3,FIND("@",B3)+1)+1,LEN(B3)),"(",REPT(" ",100)),100)),"") )
逻辑说明:
- 用
FIND定位每个@的位置,截取@前的文本片段(包含末尾的() - 通过
SUBSTITUTE将(替换为大量空格,再用LEFT截取有效文本,TRIM清除多余空格 IFERROR处理@不足3次的场景,避免报错TEXTJOIN自动跳过空值,用,拼接所有有效内容
方案2:兼容无TEXTJOIN的版本
如果你的Excel 2016版本不支持TEXTJOIN,可使用CONCATENATE组合:
=TRIM(CONCATENATE( IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B3,1,FIND("@",B3)-1),"(",REPT(" ",100)),100))&", ",""), IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B3,FIND("@",B3)+1,LEN(B3)),"(",REPT(" ",100)),100))&", ",""), IFERROR(TRIM(LEFT(SUBSTITUTE(MID(B3,FIND("@",B3,FIND("@",B3)+1)+1,LEN(B3)),"(",REPT(" ",100)),100)),"") ))
逻辑说明:给每个有效内容添加, ,最后用TRIM去除末尾多余的分隔符。
VBA解法(更灵活)
若公式过于繁琐,可创建自定义函数适配任意次数的@:
- 按
Alt+F11打开VBA编辑器,插入模块 - 粘贴以下代码:
Function ExtractAtContent(rng As Range) As String Dim inputText As String, result As String Dim parts() As String, temp As String Dim i As Integer inputText = rng.Value parts = Split(inputText, "@") For i = 0 To UBound(parts) - 1 temp = Trim(Left(parts(i), InStrRev(parts(i), "(") - 1)) If temp <> "" Then result = result & IIf(result <> "", ", ", "") & temp End If Next i ExtractAtContent = result End Function
- 返回Excel,在目标单元格输入
=ExtractAtContent(B3)即可获取结果。
内容的提问来源于stack exchange,提问作者Excel lover
相关产品推荐
相关产品推荐

