Возвращать цвет фона выбранной ячейки

У меня есть таблица, ячейки которой цветно освещаются.

Кто-нибудь знает, как я могу вернуть значение цвета фона текущей ячейки в листе Excel?

Ответы

Ответ 1

Вы можете использовать Cell.Interior.Color, я использовал его для подсчета количества ячеек в диапазоне, который имеет заданный цвет фона (т.е. соответствует моей легенде).

Ответ 2

Если вы смотрите таблицу, сводную таблицу или что-то с условным форматированием, вы можете попробовать:

ActiveCell.DisplayFormat.Interior.Color

Это также отлично работает на обычных ячейках.

Ответ 3

Возможно, вы можете использовать следующие свойства:

ActiveCell.Interior.ColorIndex - one of 56 preset colors

и

ActiveCell.Interior.Color - RGB color, used like that:

ActiveCell.Interior.Color = RGB(255,255,255)

Ответ 4

Приведенный ниже код дает значения HEX и RGB диапазона, отформатированного с использованием условного форматирования или иным образом. Если диапазон не отформатирован с использованием условного форматирования, и вы намерены использовать функцию iColor в Excel как UDF. Это не сработает. Прочитайте приведенную ниже выдержку из MSDN.

Обратите внимание, что свойство DisplayFormat не работает в пользовательских функциях. Например, в функции листа, которая возвращает внутренний цвет ячейки, если вы используете строку, аналогичную следующей:

Range.DisplayFormat.Interior.ColorIndex

затем выполняется функция листа, возвращающая # ЗНАЧЕНИЕ! ошибка. Если вы не находите цвет условно отформатированного диапазона, тогда я рекомендую вам использовать

Range.Interior.ColorIndex

тогда функция также может использоваться как UDF в Excel. Например, iColor (B1, "HEX")

Public Function iColor(rng As Range, Optional formatType As String) As Variant
'formatType: Hex for #RRGGBB, RGB for (R, G, B) and IDX for VBA Color Index
    Dim colorVal As Variant
    colorVal = rng.DisplayFormat.Interior.Color
    Select Case UCase(formatType)
        Case "HEX"
            iColor = "#" & Format(Hex(colorVal Mod 256),"00") & _
                           Format(Hex((colorVal \ 256) Mod 256),"00") & _
                           Format(Hex((colorVal \ 65536)),"00")
        Case "RGB"
            iColor = Format((colorVal Mod 256),"00") & ", " & _
                     Format(((colorVal \ 256) Mod 256),"00") & ", " & _
                     Format((colorVal \ 65536),"00")
        Case "IDX"
            iColor = rng.Interior.ColorIndex
        Case Else
            iColor = colorVal
    End Select
End Function

'Example use of the iColor function
Sub Get_Color_Format()
    Dim rng As Range

    For Each rng In Selection.Cells
        rng.Offset(0, 1).Value = iColor(rng, "HEX")
        rng.Offset(0, 2).Value = iColor(rng, "RGB")
    Next
End Sub