VBA快速交叉分段标记字符颜色
实例需求:A列中有不确定行数的数据,现在需要将数据按照每4位一组间隔标记颜色,如下图所示。
示例代码如下。
Sub Demo()Dim rngCell As RangeDim rngData As RangeDim i, res, intLenSet rngData = Range("A1").CurrentRegionrngData.Font.ColorIndex = 0For Each rngCell In rngDataDebug.Print "==" & rngCell.Address & "=="Debug.Print "LenOfDigits", "StartPos", "LenRedChar"res = Len(Trim(rngCell)) Mod 8For i = Len(rngCell) - 8 To -3 Step -8If (i <= 0) And (res > 4) ThenintLen = res - 4ElseintLen = 4End IfrngCell.Characters(i + 1, intLen).Font.Color = vbRedDebug.Print Len(rngCell), i + 1, intLenNext iNext rngCell
End Sub
【代码解析】
第11行代码获取A1单元格开始的数据区域。
第12行代码设置设置单元格字体颜色为默认黑色。
第13行代码循环变量数据单元格。
第14~15行代码输出标题行,便于大家理解代码的执行过程。
第16行代码使用Trim
去掉单元格内容中的前导和尾随空格,Len
获取字符长度,Mod
为取余数运算符。
第17~25行代码循环标记字符颜色。
第18~22行代码根据不同情况为变量intLen赋值,其中变量intLen为设置颜色的字符长度。
第23行代码设置字符字体颜色为红色。
第24行代码输出单元格字符长度,起始位置和设置颜色的字符长度。
代码逻辑并不复杂,其核心是如何获取起始位置和设置颜色的字符长度,运行代码【立即窗口】中输入结果如下。大家可以在VBE使用“逐语句”执行功能单步调试来进一步理解代码的执行过程。
==$A$1==LenOfDigits StartPos LenRedChar==$A$2==LenOfDigits StartPos LenRedChar5 -2 1 ==$A$3==LenOfDigits StartPos LenRedChar10 3 4 ==$A$4==LenOfDigits StartPos LenRedChar14 7 4 14 -1 2 ==$A$5==LenOfDigits StartPos LenRedChar18 11 4 18 3 4 ==$A$6==LenOfDigits StartPos LenRedChar21 14 4 21 6 4 21 -2 1 ==$A$7==LenOfDigits StartPos LenRedChar24 17 4 24 9 4 24 1 4 ==$A$8==LenOfDigits StartPos LenRedChar26 19 4 26 3 4 26 11 4