将单元格的背景颜色设置为单元格数据的RGB值

40

我有一列包含RGB值,例如:

127,187,199
67,22,94

在Excel中,我可以使用这个来设置单元格的背景颜色吗?

5个回答

66

您可以使用VBA - 类似于:

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

只需传入单元格值即可。


18

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

如果你想确保精确匹配,需要将 ColorIndex 更改为所需的 RGB 值,然后将单元格的 ColorIndex 更改为该值。但是,你应该意识到,通过更改颜色索引的值,你会更改工作簿中所有已使用该颜色的单元格的颜色。举个例子,红色是 ColorIndex 3。因此,你使某个单元格变成红色时,实际上是将其变成了 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

有没有办法让它循环遍历H列中所有有数据的单元格? - undefined

4

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值。字体颜色是对比鲜明的白色或黑色。


1
Sub AddColor()
    For Each cell In Selection
        R = Round(cell.Value)
        G = Round(cell.Offset(0, 1).Value)
        B = Round(cell.Offset(0, 2).Value)
        Cells(cell.Row, 1).Resize(1, 4).Interior.Color = RGB(R, G, B)
    Next cell
End Sub

假设有3列 R、G 和 B(顺序如上)。选择第一列即 R。按 alt+F11 并运行上述代码。每次更改值以反映更改时,我们必须选择第一列(包含 R 或红色值)并运行代码。希望这段简化的代码能帮到您!

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()函数将它们组合起来。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接