2017-07-08 22 views
1

Excelの範囲に8色の定数があります。私はちょうどセル値に基づいて、隣接する列のセルの内装色を変更するだけでした。残念ながら、値が文字列として扱われるため、型の不一致が発生しますが、定数に変換する方法はわかりません。例えば色定数のセル値に基づいて内装色を変更します

、青に内装色を変更するには、それが文字列 "vbblue"

あるので、これは」 rng.interior.color = vbblue

ではなく、この rng.interior.color = rng.value作品

列Eの範囲が列Dの値に基づいて背景色になるように、rng.valueを文字列から色定数に変換するにはどうすればよいですか?

range

Dim colorRange As Range 
Dim rng As Range 
Set colorRange = Range("D1", Range("D1").End(xlDown).Address) 

For Each rng In colorRange 
    rng.Offset(, 1).Interior.Color = rng.Value 
Next rng 

答えて

2

その値にConstantの名前を変換する「ビルトイン」方法はありません。あなた自身でマッピングを行う必要があります。

Function TextToColor(s As String) As Long 
    Static dict As Dictionary 
    If dict Is Nothing Then 
    Set dict = CreateObject("Scripting.Dictionary") 
    dict("vbBlack") = vbBlack 
    dict("vbWhite") = vbWhite 
    dict("vbRed") = vbRed 
    dict("vbGreen") = vbGreen 
    dict("vbBlue") = vbBlue 
    dict("vbYellow") = vbYellow 
    dict("vbMagenta") = vbMagenta 
    dict("vbCyan") = vbCyan 
    ' dict("etc...") = etc... 
    End If 
    TextToColor = dict(s) 
End Function 

Sub ExampleUse() 
    Dim colorRange As Range: Set colorRange = Range("D1", Range("D1").End(xlDown).Address) 
    Dim rng As Range 
    For Each rng In colorRange 
    rng.Offset(, 1).Interior.Color = TextToColor(rng.value) 
    Next rng 
End Sub 
+0

私はselect caseステートメントの使用を検討していましたが、何も欠けていないことを確認したかったのです。あなたはマップされていることを確認したので、私はあなたの答えを選択することができます。しかし、1つの質問ですが、関数型がlongに設定されているのはなぜですか?ありがとう。 –

+1

ニース回避策: –

+0

@AshtonMorganこれらの定数はlong型ですが、内部的には3バイトで赤、緑、青の強度がエンコードされます。そのため、 'RGB'関数は' Long'を返します。 –

0

あなたが代わりのColorIndexと直接それを行うことができます:最高の辞書を使用することです。セルは5または関連カラーインデックス番号を言うのであれば、この行以外のコード変更する必要はありません。

rng.Offsetは(1).Interior.Color インデックス = rng.Value

関連する問題