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

如何基于字体样式(下划线、删除线)拆分Excel单元格中的数字

拆分带格式的新旧数值为两列的方法

方法一:VBA宏批量提取

适合有基础的用户,能批量处理整列数据:

  1. 按Alt + F11打开VBA编辑器
  2. 插入新模块,粘贴以下代码:
Sub SplitOldNewNumbers()
    Dim rng As Range
    Dim cell As Range
    Dim i As Integer
    Dim oldVal As String, newVal As String
    
    ' 选择要处理的列(默认A列,可按需修改)
    Set rng = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
    
    ' 写入表头
    Cells(1, "B").Value = "Old number"
    Cells(1, "C").Value = "New Number"
    
    For Each cell In rng
        oldVal = ""
        newVal = ""
        ' 遍历单元格内每个字符的格式
        For i = 1 To Len(cell.Value)
            If cell.Characters(i, 1).Font.Strikethrough Then
                oldVal = oldVal & cell.Characters(i, 1).Text
            ElseIf cell.Characters(i, 1).Font.Underline <> xlUnderlineStyleNone Then
                newVal = newVal & cell.Characters(i, 1).Text
            End If
        Next i
        ' 写入对应列
        cell.Offset(0, 1).Value = oldVal
        cell.Offset(0, 2).Value = newVal
    Next cell
End Sub
  1. 运行宏,B、C列将自动生成拆分后的旧值和新值

方法二:Power Query(无代码基础也能用)

适合普通用户,可视化操作:

  1. 选中目标数据列,点击「数据」选项卡 → 「从表格/区域」(Excel 2016及以上版本支持)
  2. 在Power Query编辑器中添加自定义列:
    • 点击「添加列」→「自定义列」,输入公式提取旧值(带删除线的字符):
      Text.Combine(List.Transform(Text.ToList([Column1]), (c) => if Record.Field(Record.Field(Text.PositionOf([Column1], c), "Font"), "Strikethrough") then c else ""))
      
    • 再添加一个自定义列提取新值(带下划线的字符):
      Text.Combine(List.Transform(Text.ToList([Column1]), (c) => if Record.Field(Record.Field(Text.PositionOf([Column1], c), "Font"), "Underline") <> "None" then c else ""))
      
  3. 删除原始列,将自定义列重命名为「Old number」和「New Number」
  4. 点击「关闭并上载」,拆分后的表格将导入到Excel中

注:旧版Excel可能不支持Power Query提取字符格式,此时VBA方法更可靠。

内容的提问来源于stack exchange,提问作者Hans Von Ugler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:25:19