如何基于字体样式(下划线、删除线)拆分Excel单元格中的数字
拆分带格式的新旧数值为两列的方法
方法一:VBA宏批量提取
适合有基础的用户,能批量处理整列数据:
- 按
Alt + F11打开VBA编辑器 - 插入新模块,粘贴以下代码:
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
- 运行宏,B、C列将自动生成拆分后的旧值和新值
方法二:Power Query(无代码基础也能用)
适合普通用户,可视化操作:
- 选中目标数据列,点击「数据」选项卡 → 「从表格/区域」(Excel 2016及以上版本支持)
- 在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 ""))
- 点击「添加列」→「自定义列」,输入公式提取旧值(带删除线的字符):
- 删除原始列,将自定义列重命名为「Old number」和「New Number」
- 点击「关闭并上载」,拆分后的表格将导入到Excel中
注:旧版Excel可能不支持Power Query提取字符格式,此时VBA方法更可靠。
内容的提问来源于stack exchange,提问作者Hans Von Ugler
相关产品推荐
相关产品推荐

