web-dev-qa-db-ja.com

他のセルに保存されているRGB値に従って、セルの背景色を動的に変更します

他の3つのセルに格納されている値に従ってアクティブセルの背景色を設定する関数をExcelで記述しようとしています(これらの3つのセルのそれぞれは、色Rに応じて0〜255の数値を格納します)。 GまたはB)。

したがって、A1セルは150、B1セルは220、C1セルは90です(つまり、RGB(150、220、90))。 D1セルの色が前に宣言されたRGB(ある種の緑)である必要があります。また、関数をD2に配置すると、A2、B2、C2などに保存されているRGBが選択されます...

これは達成できますか?

8
epaezr

UDFバージョン:

Function myRGB(r, g, b)

    Dim clr As Long, src As Range, sht As String, f, v

    If IsEmpty(r) Or IsEmpty(g) Or IsEmpty(b) Then
        clr = vbWhite
    Else
        clr = RGB(r, g, b)
    End If

    Set src = Application.ThisCell
    sht = src.Parent.Name

    f = "Changeit(""" & sht & """,""" & _
                  src.Address(False, False) & """," & clr & ")"
    src.Parent.Evaluate f
    myRGB = ""
End Function

Sub ChangeIt(sht, c, clr As Long)
    ThisWorkbook.Sheets(sht).Range(c).Interior.Color = clr
End Sub

使用法(D1に入力):

=myRGB(A1,B1,C1)
15
Tim Williams

D1に次のように入力します。

=A1 & "," & B1 & "," & C1

ワークシートのコード領域に、次のイベントマクロを入力します。

Private Sub Worksheet_Calculate()
   Range("D1").Interior.Color = RGB(Range("A1"), Range("B1"), Range("C1"))
End Sub

enter image description here

5
Gary's Student

これが行1だけでなく列全体で機能することを想定すると、ワークシートのコードモジュールのVBAプロシージャを次に示します。

Private Sub Worksheet_Change(ByVal Target As Range)

    With Target
        If .Count = 1 Then
            If .Column < 4 Then
                Cells(.Row, 4).Interior.Color = RGB(Cells(.Row, 1), Cells(.Row, 2), Cells(.Row, 3))
            End If
        End If
    End With

End Sub

注:次の意味がわからないため、対処していません:and also, if I place the function in D2, it will select the RGB stored in A2, B2 and C2

1
Excel Hero