2011-10-01 78 views
7

在单元格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 

任何帮助将不胜感激。

回答

11

可以使用字符(开始,长度属性来做到这一点。您还可以将文本存储在字符串中并循环显示,这对于处理多个单元格时会更快。这里有一个例子:

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 
+0

也没有,我用$中期,而不是中间因为它是函数的字符串版本(不变形版)。它会给你提供很小的性能提升,如果你经常使用它,这可能会加起来,但这是最好的做法。 – aevanko

+0

是的额外的演员VBA必须做的是浪费。也就像整数一样 - VBA每次都会将其强制转换为很长时间,所以在VBA中没有理由使用整数。 – aevanko

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