I'm trying to write a function in Excel that will set the background color of the active cell according to the values stored in other three cells (each of those three cells store a numeric value from 0 to 255, depending on the color R, G or B).
我正在尝试在Excel中编写一个函数,根据存储在其他三个单元格中的值设置活动单元格的背景颜色(这三个单元格中的每一个都存储一个0到255之间的数值,具体取决于颜色R, G或B)。
So the A1 cell is 150, the B1 cell is 220 and the C1 cell is 90 (that's RGB(150, 220, 90)). I need that the D1 cell's color is that RGB declared before (some kind of green), and also, if I place the function in D2, it will select the RGB stored in A2, B2 and C2, and so on...
因此,A1单元格为150,B1单元格为220,C1单元格为90(即RGB(150,220,90))。我需要D1单元格的颜色是之前声明的RGB(某种绿色),而且,如果我将函数放在D2中,它将选择存储在A2,B2和C2中的RGB,依此类推......
Can this be achieved?
这可以实现吗?
3 个解决方案
#1
#2
10
UDF version:
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
Usage (entered in D1):
用法(在D1中输入):
=myRGB(A1,B1,C1)
#3
1
Assuming you would want this to work with the entire columns instead of just row 1, here is the VBA procedure for the worksheet's code module:
假设您希望这可以使用整个列而不是第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
Note: I do not know what you mean by the following and so have not addressed it: and also, if I place the function in D2, it will select the RGB stored in A2, B2 and C2
.
注意:我不知道你的意思是什么,所以没有解决它:而且,如果我把功能放在D2中,它将选择存储在A2,B2和C2中的RGB。
#1
3
In D1 enter:
在D1输入:
=A1 & "," & B1 & "," & C1
and in the worksheet code area, enter the following event macro:
并在工作表代码区域中,输入以下事件宏:
Private Sub Worksheet_Calculate()
Range("D1").Interior.Color = RGB(Range("A1"), Range("B1"), Range("C1"))
End Sub
#2
10
UDF version:
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
Usage (entered in D1):
用法(在D1中输入):
=myRGB(A1,B1,C1)
#3
1
Assuming you would want this to work with the entire columns instead of just row 1, here is the VBA procedure for the worksheet's code module:
假设您希望这可以使用整个列而不是第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
Note: I do not know what you mean by the following and so have not addressed it: and also, if I place the function in D2, it will select the RGB stored in A2, B2 and C2
.
注意:我不知道你的意思是什么,所以没有解决它:而且,如果我把功能放在D2中,它将选择存储在A2,B2和C2中的RGB。