Функция Excel VBA для возврата True или False на основе цветов фона ячейки в диапазоне

Я веду таблицу своего графика на работе и когда я встречаюсь и ожидаю достижения определенных вех. Данные (даты) хранятся слева направо, и каждый проект имеет свою собственную строку. Вехи устанавливаются постоянно и занимают диапазон (O:AA). Мои данные имеют цветовую маркировку: зеленый (завершено), оранжевый (крайний срок), синий (не работает), красный (неприменимо).

Я хотел бы написать функцию, которая проверяла бы, содержит ли ячейка фон оранжевого цвета (индекс цвета 6), и возвращала бы TRUE или FALSE на основе этого. В основном я хочу объединить все сроки по всем столбцам. В конце концов я хотел бы также интегрировать проверку даты, чтобы я мог видеть, какие сроки приближаются.

Function ScanForColor(Dates As Range) as Boolean
    If ScanForColor.Interior.ColorIndex = 6 Then
        ScanForColor = True
    Else
        ScanForColor = False
End Function

Я хотел бы вызвать функцию в ячейке, например =ScanForColor(O3:AA3), и у меня будет функция ScanForColor в столбце AB для хранения значений для фильтрации документа.


person Ryan B    schedule 28.07.2010    source источник
comment
Не проще ли вместо этого ввести один из четырех кодов в каждую ячейку? Таким образом, вы можете использовать обычные формулы рабочей книги для агрегирования. Вы по-прежнему можете изменять цвет фона, используя условное форматирование — условные форматы для трех состояний и цвет ячейки по умолчанию для четвертого.   -  person Tim Robinson    schedule 28.07.2010


Ответы (1)


Что-то вроде этого поможет!

Function ScanForColor(Cells As Range, ColorValue As Integer) As Boolean
    Dim cell As Range
    For Each cell In Cells
        If cell.Interior.ColorIndex = ColorValue Then
            ScanForColor = True
            Exit For
        End If
    Next
End Function

Это позволит вам вызывать и тестировать различные значения цвета....

person Graeme    schedule 28.07.2010
comment
Большое спасибо ГраГра. Это помогло мне построить отчет, над которым я работаю. - person Ryan B; 30.07.2010