Excel VBA:提取含换行符单元格的加粗文本并解决拼接问题
问题解决:Excel提取单元格内加粗文本并正确分隔
问题场景
Excel单元格包含以下带格式的文本(含换行):
pc laptop
Google - home
some words
android
some words
编写的VBA函数提取加粗文本后,得到错误结果:
Google, -, homeandroid
原VBA代码:
Public Function findAllBold(ByVal rngText As Range) As String Dim theCell As Range Set theCell = rngText.Cells(1, 1) For i = 1 To Len(theCell.Value) If theCell.Characters(i, 1).Font.Bold = True Then If theCell.Characters(i + 1, 1).Text = " " Then theChar = theCell.Characters(i, 1).Text & ", " Else theChar = theCell.Characters(i, 1).Text End If Results = Results & theChar End If Next i findAllBold = Results End Function
问题原因
原代码仅通过判断当前字符的下一个是否为空格来添加分隔符,无法识别两个独立加粗文本块之间的分隔,导致第二个加粗块直接拼接到第一个的末尾。
修改后的VBA代码
Public Function findAllBold(ByVal rngText As Range) As String Dim theCell As Range Dim Results As String Dim isBold As Boolean Dim prevIsBold As Boolean Dim i As Integer Set theCell = rngText.Cells(1, 1) Results = "" prevIsBold = False ' 初始状态为非加粗 For i = 1 To Len(theCell.Value) isBold = theCell.Characters(i, 1).Font.Bold If isBold Then ' 进入新加粗块时,若已有提取内容则添加分隔符 If Not prevIsBold And Results <> "" Then Results = Results & ", " End If Results = Results & theCell.Characters(i, 1).Text End If prevIsBold = isBold ' 更新上一个字符的加粗状态 Next i findAllBold = Results End Function
逻辑说明
- 新增
prevIsBold变量跟踪上一个字符的加粗状态,以此判断是否进入新的加粗文本块 - 当从非加粗切换到加粗状态,且已有提取内容时,自动添加
,分隔符 - 直接拼接加粗字符,避免原逻辑中因空格判断导致的多余逗号问题
运行修改后的函数,将得到正确结果:Google - home, android
内容的提问来源于stack exchange,提问作者Станислав Мерц
相关产品推荐
相关产品推荐

