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在单元格上(尝试!)后,背景颜色将更新为从单元格A2C2获取的RGB。 字体颜色是对比的白色或黑色。