2011-10-01 15 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の余分なキャストは無駄です。 integer-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 
関連する問題