Использовать цвет ячейки как условие в выражении if (function)

Я пытаюсь получить ячейку для выполнения функции, основанной на цвете hilight ячейки.

Вот функция, которую я сейчас имею:

=IF(A6.Interior.ColorIndex=6,IF(ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,3,(M6/5)+2))),0)=0,0,ROUNDDOWN(IF(M6<3,0,IF(M6<5,1,IF(M6<10,2,(M6/5)+2))),0)),IF(ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)=0,0,ROUNDDOWN(IF(M6<7,0,IF(M6<10,1,M6/5)),0)))

Просто, чтобы вам не пришлось читать все это, здесь более простой пример

=IF(A6.Interior.ColorIndex=6,"True","False")

Все, что он возвращает, #NAME?, Есть ли способ, которым я могу сделать это как функцию в ячейке или требуется VBA?

Спасибо,

Иордания

Ответ 1

Вы не можете использовать VBA (Interior.ColorIndex) в формуле, поэтому вы получаете ошибку.

Это невозможно сделать без VBA.

Function YellowIt(rng As Range) As Boolean
    If rng.Interior.ColorIndex = 6 Then
        YellowIt = True
    Else
        YellowIt = False
    End If
End Function

Однако я не рекомендую это: не предназначены для использования пользовательскими функциями VBA (UDF). Они должны отражать поведение функций Excel, которые не могут читать цветовое форматирование ячейки. (Эта функция может не работать в будущей версии Excel.)

Намного лучше, если вы основываете формулу на исходное условие (решение), которое делает ячейку желтой в первую очередь. Или, альтернативно, запустите процедуру Sub для заполнения значений True или False (хотя, конечно, эти значения больше не будут связаны с форматированием исходных ячеек).

Ответ 2

Я не верю, что есть способ получить цвет ячейки из формулы. Самое близкое, что вы можете получить, это формула CELL, но (по крайней мере, в Excel 2003), она не возвращает цвет ячейки.

Было бы довольно легко реализовать с помощью VBA:

Public Function myColor(r As Range) As Integer
    myColor = r.Interior.ColorIndex
End Function

Затем на листе:

=mycolor(A1)

Ответ 3

Хотя это напрямую не касается вашего вопроса, вы можете сортировать свои данные по цвету ячеек в Excel (что делает его довольно простым обозначать все записи определенным цветом таким же образом и, следовательно, условие на эту метку).

В Excel 2010 вы можете сделать это, перейдя в Data → Sort → Sort On "Color Cell".

Ответ 4

У меня была аналогичная проблема, когда мне нужно было показывать только значение из другой ячейки Excel, если шрифт был черным. Я создал эту функцию: `Option Explicit

Функция blackFont (r As Range) As Boolean   Если r.Font.Color = 0 Тогда       blackFont = True   еще       blackFont = False   End If

Конечная функция `

В моей ячейке у меня есть эта формула: =IF(blackFont(Y51),Y51," ")

Это сработало для меня, чтобы проверить черный шрифт и показывать только значение в ячейке Y51, если у него черный шрифт.

Ответ 5

Единственное удобное решение, которое я применил, - это воссоздать основное условие, которое делает основные моменты как условие IF, и использовать его в формуле IF. Что-то вроде этого. В зависимости от условия выделения формула изменится, но я думаю, что ее нужно воссоздать (например, выделить более 20).

=IF(B3>20,(B3)," ")