Excel:将单元格的背景颜色设置为单元格中数据的rgb值

时间:2009-09-15 10:36:47

标签: excel vba spreadsheet

我有一个包含rgb值的列,例如

127,187,199
67,22,94

在Excel中,有什么方法可以用它来设置单元格的背景颜色吗?

5 个答案:

答案 0 :(得分:50)

您可以使用VBA - 类似

Range("A1:A6").Interior.Color = RGB(127,187,199)

只需传入单元格值。

答案 1 :(得分:18)

单独设置Color属性可确保完全匹配。 Excel 2003一次只能处理56种颜色。好消息是你可以将任何rgb值分配给那56个插槽(称为ColorIndexs)。使用Color属性设置单元格的颜色时,这会导致Excel使用最近的“ColorIndex”。示例:将单元格设置为RGB 10,20,50(或3281930)实际上会将其设置为颜色索引56,即51,51,51(或3355443)。

如果您想确保获得完全匹配,则需要将ColorIndex更改为所需的RGB值,然后将Cell的ColorIndex更改为所述值。但是,您应该知道,通过更改颜色索引的值,您可以更改已在工作簿中使用该颜色的所有单元格的颜色。举一个例子,Red是ColorIndex 3.所以你制作的任何单元格Red实际上都是ColorIndex 3.如果你重新定义ColorIndex 3就是紫色,那么你的单元格确实会变成紫色,但所有其他红色单元格都是紫色的。工作簿也将变为紫色。

有几种策略可以解决这个问题。一种方法是选择尚未使用的索引,或者只选择您认为不可能使用的索引。另一种方法是更改​​最接近的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

答案 2 :(得分:3)

无法在用作工作表公式的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!")

将鼠标悬停在单元格上(试一试!)后,背景颜色会更新为从单元格A2C2的RGB。字体颜色是对比的白色或黑色。

答案 3 :(得分:0)

要根据当前整数值为每个单元格着色,如果您有最新版本的Excel,则以下内容应该有效。 (旧版本也不处理rgb)

Sub Colourise()
'
' Colourise Macro
'
' Colours all selected cells, based on their current integer rgb value
' For e.g. (it's a bit backward from what you might expect)
' 255 = #ff0000 = red
' 256*255 = #00ff00 = green
' 256*256*255 #0000ff = blue
' 255 + 256*256*255 #ff00ff = magenta
' and so on...
'
' Keyboard Shortcut: Ctrl+Shift+C (or whatever you want to set it to)
'
  For Each cell In Selection
    If WorksheetFunction.IsNumber(cell) Then
      cell.Interior.Color = cell.Value
    End If
  Next cell
End Sub

如果您有一个字符串而不是数字,那么您可以将字符串拆分为三个数字并使用rgb()进行组合。

答案 4 :(得分:0)

Sub AddColor()     对于选择中的每个单元格         R =舍入(cell.Value)         G =圆(cell.Offset(0,1).Value)         B =舍入(cell.Offset(0,2).Value)         单元格(cell.Row,1).Resize(1,4).Interior.Color = RGB(R,G,B)     下一个单元格 结束

假定存在3列R,G和B(按此顺序)。选择第一列,即R。按alt + F11并运行上面的代码。我们必须选择第一列(包含R或红色值)并在每次更改值以反映更改时运行代码。

我希望这段简单的代码对您有所帮助!