Excel:将单元格的背景颜色设置为单元格中数据的rgb值
我有一个包含rgb值的列,例如
127,187,199 67,22,94
在Excel中,有什么办法可以使用它来设置单元格的背景颜色?
你可以使用VBA – 就像
Range("A1:A6").Interior.Color = RGB(127,187,199)
只要传入单元格值即可。
单独设置颜色属性将保证完全匹配。 Excel 2003只能同时处理56种颜色。 好消息是,您可以将56个插槽(称为ColorIndex)的rgb值分配给这56个插槽。 当您使用Color属性设置单元格的颜色时,这会导致Excel使用最近的“ColorIndex”。 示例:将单元格设置为RGB 10,20,50(或3281930)实际上会使其被设置为51,51,51(或3355443)的颜色索引56。
如果您想确保您获得完全匹配,则需要将ColorIndex更改为所需的RGB值,然后将Cell的ColorIndex更改为所述值。 但是,您应该知道,通过更改颜色索引的值,可以更改在工作簿中已经使用该颜色的所有单元格的颜色。 举个例子,Red是ColorIndex 3.所以任何你制作Red的单元格你都会制作ColorIndex 3,如果你重新定义了ColorIndex 3的话,就是说紫色,那么你的单元格确实会变成紫色,而其他所有的红色单元格工作簿也将被改为紫色。
有几个策略来处理这个问题。 一种方法是select一个尚未被使用的索引,或者一个你认为不太可能被使用的索引。 另一种方法是改变最接近的ColorIndex的RGB值,这样你的改变将是微妙的。 我在下面发布的代码采用了这种方法。 利用最近ColorIndex分配的知识,它将RGB值直接分配给单元格(从而产生最接近的颜色),然后将RGB值分配给该索引。
Sub Example() Dim lngColor As Long lngColor = RGB(10, 20, 50) With Range("A1").Interior .Color = lngColor ActiveWorkbook.Colors(.ColorIndex) = lngColor End With End Sub
单元格不能从用作工作表公式的VBA函数中更改。 除了通过这个解决方法…
把这个函数放到一个新的模块中:
Function SetRGB(x As Range, R As Byte, G As Byte, B As Byte) On Error Resume Next x.Interior.Color = RGB(R, G, B) x.Font.Color = IIf(0.299 * R + 0.587 * G + 0.114 * B < 128, vbWhite, vbBlack) End Function
然后在工作表中使用此公式,例如在单元格D2
:
=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!")
将鼠标hover在单元格上(尝试!)后,背景颜色将更新为从单元格A2
到C2
获取的RGB。 字体颜色是对比的白色或黑色。