代码之家  ›  专栏  ›  技术社区  ›  Internet man

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

  •  28
  • Internet man  · 技术社区  · 15 年前

    我有一列包含RGB值,例如

    127,187,199
    67,22,94
    

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

    5 回复  |  直到 6 年前
        1
  •  50
  •   Galwegian    15 年前

    您可以使用vba-类似

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

    只需传入单元格值。

        2
  •  18
  •   Oorang    14 年前

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

    如果要确保获得完全匹配,需要将colorndex更改为所需的RGB值,然后将单元格的colorndex更改为所需的值。但是,您应该知道,通过更改颜色索引的值,您可以更改 全部的 工作簿中已使用该颜色的单元格。举个例子,红色是colorndex3。所以你做的任何一个红色的细胞,实际上都是彩色的。如果您将colorndex3重新定义为紫色,那么您的单元格确实将变为紫色,但工作簿中的所有其他红色单元格也将变为紫色。

    有几种应对策略。一种方法是选择一个尚未使用的索引,或者只选择一个您认为不可能使用的索引。另一种方法是更改 最近的颜色索引 所以你的改变是微妙的。我在下面发布的代码采用这种方法。利用最近的colorndex被分配的知识,它直接将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
    
        3
  •  3
  •   Michel de Ruiter    8 年前

    不能从用作工作表公式的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!")
    

    一旦你将鼠标悬停在手机上(试试看!),背景色更新为单元格中的RGB A2 C2 .字体颜色是白色或黑色的对比。

        4
  •  0
  •   Ben Aveling    6 年前

    要根据每个单元格的当前整数值为其上色,如果您有最新版本的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()组合它们。

        5
  •  0
  •   Amrit Pal Singh    6 年前

    子AddioCo() 对于所选的每个单元格 R=圆形(单元格值) G=圆形(单元格偏移量(0,1)。值) B=圆形(单元格偏移量(0,2)。值) 单元格(cell.row,1)。调整大小(1,4)。interior.color=r g b(r,g,b) 下一个单元 结束子

    假设有3列R、G和B(按此顺序)。选择第一列IE R。按Alt+F11并运行上述代码。我们必须选择第一列(包含R或红色值),并在每次更改值以反映更改时运行代码。

    我希望这个简单的代码有帮助!