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

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解法(更灵活)

若公式过于繁琐,可创建自定义函数适配任意次数的@:

  1. 按Alt+F11打开VBA编辑器,插入模块
  2. 粘贴以下代码:
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
  1. 返回Excel,在目标单元格输入=ExtractAtContent(B3)即可获取结果。

内容的提问来源于stack exchange,提问作者Excel lover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:02:41