我有一个包含rgb值的列,例如
127,187,199
67,22,94
在Excel中,有什么方法可以用它来设置单元格的背景颜色吗?
答案 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!")
将鼠标悬停在单元格上(试一试!)后,背景颜色会更新为从单元格A2
到C2
的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或红色值)并在每次更改值以反映更改时运行代码。
我希望这段简单的代码对您有所帮助!