如何使用VBA在Excel中更改单元格中单个字符的字体颜色

时间:2018-06-26 11:04:16

标签: excel-vba vba excel

我有一个Excel文件,可用于工作中的工作人员列表。在某些单元格中,我们具有用于计时目的的字母/数字信息。即CLAAO10I-可以按任意顺序使用或完全不使用0、1,I和O(可以全是字母或所有数字字符)。

在以下单元格中,我将使用哪种VBA代码将字母I和O自动更改为红色:F6,F11,F16,F21,L6,L11,L16,L21,R6,R11和R21,以提供帮助区分数字0和1以及字母I和O?

2 个答案:

答案 0 :(得分:0)

您可以使用Range.Characters(start, length)访问单元格中的特定字符,并使用Range.Characters(start, length).Font.Color着色特定字符。

因此,您将需要一个循环来遍历给定范围内的所有单元格。然后循环遍历每个单元格中的所有字符,并根据需要为其着色。

Option Explicit

Public Sub ColorizeLetters()
    Dim iChar As Long

    Dim Cel As Range
    For Each Cel In Worksheets("YourSheet").Range("F6,F11,F16,F21,L6,L11,L16,L21,R6,R11,R21")
        For iChar = 1 To Cel.Characters.Count
            Select Case Cel.Characters(iChar, 1).Text
                Case "O", "I"
                    Cel.Characters(iChar, 1).Font.Color = vbRed
                Case "1", "0"
                    Cel.Characters(iChar, 1).Font.Color = vbGreen
            End Select
        Next iChar
    Next Cel
End Sub

请注意,这仅适用于常数单元格,并且如果单元格包含公式,则无法为特定字符着色。

答案 1 :(得分:0)

这可以做到:

Sub makeRedSubstrings()

    Dim i As Long
    Dim cll As Range, rng As Range

    Application.ScreenUpdating = False

    ' change sheet below as required
    Set rng = Sheets("Sheet1").Range("F6,F11, F16, F21, L6, L11, L16, L21, R6, R11, R21")

    For Each cll In rng
        For i = 1 To Len(cll)
            If Mid(cll, i, 1) = "I" Or Mid(cll, i, 1) = "O" Then
                cll.Characters(Start:=i, Length:=1).Font.Color = RGB(255, 0, 0) 'red
            End If
        Next i
    Next cll

    Application.ScreenUpdating = True

End Sub