Excel: установить цвет фона ячейки в значение RGB данных в ячейке - PullRequest
28 голосов
/ 15 сентября 2009

У меня есть столбец, содержащий значения RGB, например,

127,187,199
67,22,94

В Excel, есть ли способ использовать это, чтобы установить цвет фона ячейки?

Ответы [ 5 ]

50 голосов
/ 15 сентября 2009

Вы можете использовать VBA - что-то вроде

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

Просто введите значение в ячейку.

18 голосов
/ 15 сентября 2009

Установка только свойства Color гарантирует точное совпадение. Excel 2003 может обрабатывать только 56 цветов одновременно. Хорошей новостью является то, что вы можете назначить любое значение rgb на все эти 56 слотов (которые называются ColorIndexs). Когда вы устанавливаете цвет ячейки с помощью свойства Color, это заставляет Excel использовать ближайший «ColorIndex». Пример: установка ячейки в RGB 10,20,50 (или 3281930) фактически приведет к ее установке на индекс цвета 56, равный 51,51,51 (или 3355443).

Если вы хотите быть уверены, что получили точное совпадение, вам нужно изменить ColorIndex на желаемое значение RGB, а затем изменить 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
3 голосов
/ 30 июня 2016

Ячейки нельзя изменить из функции 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. Цвет шрифта контрастный белый или черный.

0 голосов
/ 21 ноября 2018

Sub AddColor () Для каждой ячейки в выделении R = Round (ячейка. Значение) G = Round (ячейка. Смещение (0, 1). Значение) B = Round (ячейка. Смещение (0, 2). Значение) Клетки (ячейка. Ряд, 1). Размер (1, 4). Интерьер. Цвет = RGB (R, G, B) Следующая клетка End Sub

Предполагается, что есть 3 столбца R, G и B (в этом порядке). Выберите первый столбец, т.е. R. нажмите Alt + F11 и запустите приведенный выше код. Мы должны выбрать первый столбец (содержащий R или красные значения) и запускать код каждый раз, когда мы меняем значения, чтобы отразить изменения.

Надеюсь, этот более простой код поможет!

0 голосов
/ 19 января 2018

Чтобы покрасить каждую ячейку на основе ее текущего целочисленного значения, должно работать следующее, если у вас есть последняя версия 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 ().

...