更改单元格中某些字符的颜色

Joh*_*ard 8 excel formatting vba excel-vba

我在单元格A1中有句子"我想要50个,请".我想让任何数字字符成为红色文本(只是数字字符).我该怎么做呢?这是我拥有的框架......

Sub RedText()

Dim i As Integer

For i = 1 To Len(Cells(1, 1).Value)
    If IsNumeric(Mid(Cells(1, 1).Value, i, 1)) = True Then
        'make the character red text
    End If
Next

End Sub
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激.

aev*_*nko 12

您可以使用字符(开始,长度)属性来执行此操作.您还可以将文本存储在字符串中并循环显示该字符串,这在处理多个单元格时会更快.这是一个例子:

Sub RedText()

Dim i As Long
Dim text As String

text = Cells(1, 1).Value

For i = 1 To Len(text)
    If IsNumeric(Mid$(text, i, 1)) = True Then
        Cells(1, 1).Characters(i, 1).Font.Color = vbRed
    End If
Next

End Sub
Run Code Online (Sandbox Code Playgroud)


bre*_*tdj 8

您可以使用RegExp获得相同的效果.

正则表达式方法的优点是代码将立即隔离任何数字字符组(或跳过任何没有数字的字符串),而不是测试每个单独的字符.

因此,如果您正在处理相当大的数据集,它将提供速度优势

Sub RegExpRed()

    Dim objRegex As Object
    Dim RegMC As Object
    Dim RegM As Object

    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .Pattern = "\d+"
        If .test(Cells(1, 1).Value) Then
            Set RegMC = .Execute(Cells(1, 1).Value)
            For Each RegM In RegMC
                Cells(1, 1).Characters(RegM.FirstIndex + 1, RegM.Length).Font.Color = vbRed
            Next
        End If
    End With

End Sub
Run Code Online (Sandbox Code Playgroud)