1

私はオブジェクト(つまり、テキストを保持する長方形の形状)を持っていますが、セル内のテキスト(ドロップダウンリストから)に応じて形状を色(ステータス)に変更したいと思います。

現在、「If」関数を使用して形状をフォーマットしていますが、これが最善の方法だと思います。ただし、VBAで複数の「IF」式を実行する方法がわかりません。

フォーマットに成功した「If」式を実行しましたが、これは2色間でしか変更できませんでした。これが私のシングル「if」式です。

If Range("I2") = "Deviation" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
Else
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End If 

スクリプトに他の条件/'If'式を追加すると、オブジェクトの色を変更できませんでした。私が得た最も近いものは、すべての可能性をカバーするための「If」および「endIf」式でした。これが私の最も近い抽出です(私の経験から)。

If Range("I2") = "Yes" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 128, 0)
End If

If Range("I2") = "No" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(218, 9, 4)
End If

If Range("I2") = "In Progress" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(201, 129, 13)
End If

If Range("I2") = "Deviation" Then
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
Else  
    Worksheets("M2").Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End If 
4

2 に答える 2

0

ElseIfは改善されますが、最もクリーンな方法は、次のようにselectを使用することです。

Select Case Range("I2").Value
    Case "Yes"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 128, 0)
    Case "No"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(218, 9, 4)
    Case "In Progress"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(201, 129, 13)
    Case "Deviation"
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
    Case Else
        ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End Select

このコードは、私のコンピューターで動作するようにテストされています。

編集:完全を期すために、if / elseif/elseを使用した同じコードを次に示します。

If Range("I2") = "Yes" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 128, 0)
ElseIf Range("I2") = "No" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(218, 9, 4)
ElseIf Range("I2") = "In Progress" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(201, 129, 13)
ElseIf Range("I2") = "Deviation" Then
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(79, 79, 79)
Else
    ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = RGB(0, 102, 204)
End If
于 2012-07-26T10:24:32.987 に答える
0

Alexandre の回答に追加するには (それを受け入れることを忘れないでください!)、繰り返しを避けるために少しリファクタリングできます。

Dim clr As Long

Select Case Range("I2").Value
    Case "Yes": clr = RGB(0, 128, 0)
    Case "No": clr = RGB(218, 9, 4)
    Case "In Progress": clr = RGB(201, 129, 13)
    Case "Deviation": clr = RGB(79, 79, 79)
    Case Else: clr = RGB(0, 102, 204)
End Select

ActiveSheet.Shapes("Rect1").Fill.ForeColor.RGB = clr
于 2012-07-26T16:04:27.590 に答える