2015-05-05 5 views
0

Я хочу сравнить две ячейки на основе их цвета, которые они имеют.Сравните две ячейки на основе их цвета

Я создал следующую функцию. Если два цвета в ячейке совпадают, тогда он должен написать Same и покрасить ячейку green в ячейке, иначе «Изменить» и покрасить ее red.

Однако, я в настоящее время получаю:

enter image description here

В #Value клетках моя формула =ColorComparer(H4;C4)

Ниже вы можете найти свою функцию Vba, что я создал:

Function ColorComparer(rColor As Range, rRange As Range) 

Dim rCell As Range 
Dim lCol As Long 
Dim vResult 
lCol = rColor.Interior.ColorIndex 

If rCell.Interior.ColorIndex = lCol Then 
    vResult = "Same" 
    vResult.Interior.ColorIndex = RGB(0,255,0) 
Else 
    vResult = "Change" 
    vResult.Interior.ColorIndex = RGB(255,0,0) 
End If 

ColorComparer = vResult 
End Function 

Я действительно благодарю ваши ответы!

С уважением!

+1

Я вообще не понимаю ваш код. Что ты пытаешься сделать? У вас есть две таблицы и вы хотите сравнить цвета со столами или я читаю это неправильно? –

+0

@BogdanBanciu Thx для вашего ответа Богдан. Моя цель с моей цветовой функцией - сравнить цвет ячеек двух таблиц на картинке. В качестве ввода я предоставляю свою функцию по одной ячейке каждой таблицы и сравниваю ее по цвету. В качестве вывода я хотел бы иметь внутри моей третьей таблицы 'Changed' с цветом фона' red' или 'Same' с цветом фона' green' – mrquad

ответ

1

С некоторыми небольшими изменениями, ваш UDF дает правильные (Same/Change) результаты:

Function ColorComparer(rColor As Range, rRange As Range) As String 

Dim rCell As Range 
Dim lCol As Long 
Dim vResult as String 

lCol = rColor.Interior.Color 

If rRange.Interior.Color = lCol Then 
    vResult = "Same" 
' vResult.Interior.ColorIndex = RGB(0, 255, 0) 
Else 
    vResult = "Change" 
' vResult.Interior.ColorIndex = RGB(255, 0, 0) 
End If 

ColorComparer = vResult 
End Function 

Список изменений:

  • заменен rCell с rRange параметром. rCell не имеет никакого значение, присвоенное
  • заменен ColorIndex с полным значением RGB Color
  • комментировал обе vResult.Interior линии. vResult не указывает на текущую ячейку, и даже если это так, есть ряд limitations of UDFs:

Пользовательская функция, называемая формулой в ячейке листа не может изменить среду Microsoft Excel. Это означает, что такая функция не может выполнять одно из следующих действий:

Вставляет, удаляет или форматирует ячейки в электронной таблице.

Изменить значение другой ячейки.

Перемещение, переименование, удаление или добавление листов в книгу.

Измените любые параметры среды, такие как режим расчета или .

Добавить имена в книгу.

Задайте свойства или выполните большинство методов.

Вы можете использовать условное форматирование диапазона результатов для преодоления этих ограничений.

Самая сложная часть об этом UDF - это пересчет.Даже если вы определили его как летучие с дополнительной линией:

Application.Volatile True 

изменение фона ячейки не будет вызывать перерасчет.

Единственное решение, которое я знаю, это инициировать перерасчет переполнения листа в обработчиках событий SelectionChanged и Activate.

Смежные вопросы