Установите цвет фона ячейки на значение RGB данных в ячейке

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

127,187,199
67,22,94

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


person Internet man    schedule 15.09.2009    source источник


Ответы (5)


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

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

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

person Galwegian    schedule 15.09.2009

Только установка свойства 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, скажем, фиолетовым, тогда ваша ячейка действительно станет фиолетовой, но все остальные красные ячейки в рабочая тетрадь также станет фиолетовой.

Есть несколько стратегий борьбы с этим. Один из способов — выбрать индекс, который еще не используется, или просто тот, который, по вашему мнению, вряд ли будет использоваться. Другой способ — изменить значение 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
person Oorang    schedule 15.09.2009
comment
Спасибо, это тоже очень полезно. - person Internet man; 15.09.2009

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

person Michel de Ruiter    schedule 29.06.2016

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

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

person Amrit Pal Singh    schedule 21.11.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().

person Ben Aveling    schedule 19.01.2018