2011-10-01 26 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를 사용할 수 있습니다.

코드 인 Regex 방식의 장점은 개별 문자를 테스트하는 대신 모든 숫자 그룹을 즉시 분리하거나 숫자가없는 문자열을 건너 뜁니다.

는 합리적으로 대용량 데이터를 처리하는 경우에 따라서는 속도의 이점을 제공는 함수의 문자열 버전 (변형하지 버전) 이후 내가 대신 중간의 중간 $를 사용하는 것이 또한

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