У меня есть столбец, содержащий значения RGB, например:
127,187,199
67,22,94
В Excel, есть ли способ использовать это, чтобы установить цвет фона ячейки?
У меня есть столбец, содержащий значения RGB, например:
127,187,199
67,22,94
В Excel, есть ли способ использовать это, чтобы установить цвет фона ячейки?
Вы можете использовать VBA - что-то вроде
Range("A1:A6").Interior.Color = RGB(127,187,199)
Просто введите значение ячейки.
Настройка свойства 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, чтобы сказать, фиолетовый, то ваша ячейка действительно будет фиолетовой, но все остальные эритроциты в рабочая книга также будет изменена на фиолетовый.
Существует несколько стратегий борьбы с этим. Один из способов - выбрать индекс, который еще не используется, или только тот, который, по вашему мнению, вряд ли будет использоваться. Другой способ - изменить значение RGB ближайшего ColorIndex, чтобы ваше изменение было тонким. Код, который я опубликовал ниже, использует этот подход. Воспользовавшись знаниями о назначении ближайшего 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!")
Как только вы наведите указатель мыши на ячейку (попробуйте!), цвет фона обновится до RGB, взятого из ячеек A2
в C2
. Цвет шрифта контрастный белый или черный.
Чтобы покрасить каждую ячейку на основе ее текущего целочисленного значения, должно работать следующее, если у вас последняя версия Excel. (Старые версии также не поддерживают rgb)
Sub Colourise()
'
' Colourise Macro
'
' Colours all selected cells, based on their current integer rgb value
' For e.g. (it 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().
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 или красные значения) и запускать код каждый раз, когда мы меняем значения, чтобы отразить изменения.
Я надеюсь, что этот более простой код поможет!