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

请求实现Excel单元格中姓氏、名字及中间名的批量拆分

解决Excel姓名拆分提取问题

方案1:Excel公式(适用于Excel 2019/365)

直接在X9单元格输入以下公式,下拉填充到X75:

=TEXTJOIN(";",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(O9," : ","</s><s>"),", ","|")&"</s></t>","//s[contains(.,'|')]/substring-after(.,'|')"))

在Y9单元格输入以下公式,下拉填充到Y75:

=TEXTJOIN(";",TRUE,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(O9," : ","</s><s>"),", ","|")&"</s></t>","//s[contains(.,'|')]/substring-before(.,'|')"))

公式逻辑:

  1. 用SUBSTITUTE(O9," : ","</s><s>")把姓名分隔符「 : 」替换为XML节点标签,将单个单元格的姓名列表拆成独立节点。
  2. 用SUBSTITUTE(...,", ","|")把每个姓名里的「, 」替换为|,方便拆分姓氏和名字。
  3. 用FILTERXML提取每个节点中|后面的内容(名字+中间名)和|前面的内容(姓氏)。
  4. 最后用TEXTJOIN把所有结果用分号连接。

方案2:VBA宏(兼容所有Excel版本)

如果用旧版Excel或需要批量自动化处理,可使用以下VBA代码:

Sub SplitNamesToXY()
    Dim targetSheet As Worksheet
    Dim sourceRange As Range, cell As Range
    Dim nameList As Variant, fullName As Variant
    Dim lastNameStr As String, firstNameStr As String
    
    ' 指定工作表,根据实际修改
    Set targetSheet = ThisWorkbook.Worksheets("Sheet1")
    ' 设定要处理的源单元格区域
    Set sourceRange = targetSheet.Range("O9:O75")
    
    For Each cell In sourceRange
        If Trim(cell.Value) <> "" Then
            lastNameStr = ""
            firstNameStr = ""
            ' 按「 : 」拆分出每个完整姓名
            nameList = Split(cell.Value, " : ")
            
            For Each fullName In nameList
                ' 检查姓名是否包含「, 」分隔符
                If InStr(fullName, ", ") > 0 Then
                    ' 拆分姓氏和名字
                    lastNameStr = lastNameStr & ";" & Split(fullName, ", ")(0)
                    firstNameStr = firstNameStr & ";" & Split(fullName, ", ")(1)
                End If
            Next fullName
            
            ' 移除字符串开头多余的分号
            If lastNameStr <> "" Then lastNameStr = Mid(lastNameStr, 2)
            If firstNameStr <> "" Then firstNameStr = Mid(firstNameStr, 2)
            
            ' 写入X列和Y列(O列向右偏移9列是X,偏移10列是Y)
            cell.Offset(0, 9).Value = firstNameStr
            cell.Offset(0, 10).Value = lastNameStr
        End If
    Next cell
End Sub

使用方法:

  1. 按Alt+F11打开VBA编辑器。
  2. 右键工作簿→插入→模块,粘贴上述代码。
  3. 修改targetSheet = ThisWorkbook.Worksheets("Sheet1")中的工作表名为你实际使用的表名。
  4. 按F5运行宏,或在开发工具选项卡中点击“宏”选择SplitNamesToXY执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:40:08