2011-10-01 36 views
7

Tôi có câu "Tôi muốn 50 trong số đó, vui lòng" trong ô A1. Tôi muốn thực hiện bất kỳ ký tự chữ số màu đỏ nào (chỉ các ký tự số). Làm thế nào để tôi làm điều này? Đây là khung của những gì tôi có ...Thay đổi màu sắc của các ký tự nhất định trong một ô

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 

Mọi trợ giúp sẽ được đánh giá cao.

Trả lời

11

Bạn có thể sử dụng ký tự (bắt đầu, chiều dài) tài sản để làm điều này. Bạn cũng có thể lưu trữ văn bản trong một chuỗi và lặp lại, điều này sẽ nhanh hơn khi bạn làm việc với nhiều ô. Dưới đây là ví dụ:

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

Cũng không phải là tôi sử dụng trung $ thay vì trung vì nó là phiên bản chuỗi (không biến thể phiên bản) của hàm. Nó sẽ cung cấp cho bạn một tăng rất nhỏ về hiệu suất có thể tăng lên nếu bạn chạy điều này rất nhiều, nhưng đó là thực hành tốt nhất. – aevanko

+0

Vâng, việc cast thêm VBA phải làm là lãng phí. Cũng giống như số nguyên - VBA cast nó vào một thời gian dài vì vậy có thực sự không có lý do để sử dụng một số nguyên trong VBA. – aevanko

8

Bạn có thể sử dụng RegExp cho cùng một hiệu ứng.

Lợi thế của cách tiếp cận Regex là mã sẽ tách biệt ngay lập tức bất kỳ nhóm ký tự số nào (hoặc bỏ qua bất kỳ chuỗi nào không có số) thay vì thử nghiệm từng ký tự riêng lẻ.

Vì vậy, nó cung cấp một lợi thế tốc độ nếu bạn đang xử lý dữ liệu một cách hợp lý lớn đặt

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 
Các vấn đề liên quan