使用vba格式化单元格中的特定文本序列

时间:2017-08-29 04:07:57

标签: excel vba excel-vba

我有一种情况,我需要文本序列中的少数字符才能有红色。

EG。文本序列 - AAA 20.2%, BBB 23.3%, CCC 32.7%等。 在文本序列中,我只需要百分比值为红色,即AAA" 20.2%"红色,BBB" 23.3%"红色,CCC" 32.7%"红色

通过执行vlookup获得此序列,即单元格H4具有vlookup公式,通过该公式我获得了此序列。
我尝试使用以下VBA代码更改颜色,但它没有按预期工作。

Public Function red_color(text As Range) As String
    Dim StartChar As Integer, LenColor As Integer
    'Dim result As String
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    Dim i As Integer
    i = 1

    With regex
        .Pattern = "d?"
    End With

    While Mid(text, InStr(i, text, "%"), 1) = "%"
        'Mid(text, instr(i, text, " ")+1, instr(i, text, ",")-1)
        StartChar = InStr(i, text, regex.Execute(text))
        LenColor = Len(Mid(text, InStr(i, text, " ") + 1, InStr(i, text, "%")))
        text.Characters(StartChar, LenColor).Font.Color = RGB(255, 0, 0)

        i = InStr(i, text, "%") + 1

   Wend
   'red_color = result
End Function

所以最终结果应该像red_color(vlookup()),它将为我提供我需要的输出。

1 个答案:

答案 0 :(得分:2)

如果单元格有公式,则无法为单元格中的文本着色。

这是正则表达式代码的“固定”版本,但您需要添加一些代码来填充单元格。

Public Function red_color(c As Range) As String

    Dim regex As Object, matches, match
    Set regex = CreateObject("VBScript.RegExp")

    'here you need to calculate the cell content....

    c.Font.Color = vbBlack
    With regex
        .Global = True
        .Pattern = "(\d+\.?\d+\%)"
    End With

    Set matches = regex.Execute(c.text)

    For Each match In matches
        c.Characters(match.firstindex + 1, match.Length).Font.Color = RGB(255, 0, 0)
    Next match

End Function