如何修改Excel单元格内以#或-开头的每行文本的字体?
多行单元格指定行首字符行字体修改宏修正方案
原代码存在的问题
- 仅匹配单元格内第一个出现的
#或-字符,没有遍历所有行,所以只能修改第一个匹配行的格式 - 没有判断匹配字符是否处于行首位置,行中间出现目标字符时会出现误修改
修正后代码
Dim i As Range Dim lineArr As Variant Dim lineStart As Long, lineLen As Long Dim j As Long ' 遍历工作表1第二列已使用区域的所有单元格 For Each i In Sheet1.UsedRange.Columns(2).Cells lineStart = 1 ' 记录当前行在单元格文本中的起始位置 ' 按换行符拆分单元格内容为行数组 lineArr = Split(i.Text, vbLf) ' 逐行遍历判断 For j = LBound(lineArr) To UBound(lineArr) lineLen = Len(lineArr(j)) ' 跳过空行,判断行首是否为#或- If lineLen > 0 And (Left(lineArr(j), 1) = "#" Or Left(lineArr(j), 1) = "-") Then ' 修改对应行的字体 With i.Characters(Start:=lineStart, Length:=lineLen).Font .Name = "Consolas" .Size = 12 End With End If ' 累加下一行的起始位置:当前行长度+1(换行符占1个字符位) lineStart = lineStart + lineLen + 1 Next j Next i
代码说明
- 用
Split函数按换行符拆分单元格内容,逐行检查行首字符,避免误匹配行中出现的目标字符 - 逐行累计计算行的起始位置,所有匹配的行都会修改字体,不会只处理第一个匹配项
- 兼容空行场景,不会出现长度计算错误
内容的提问来源于stack exchange,提问作者Joepessy
相关产品推荐
相关产品推荐

