2011-10-01 51 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