2016-12-20 5 views
1

Я пытаюсь сравнить цвет ячейки с диапазоном диапазона и вернуть соответствующий индекс столбца ячейки в том диапазоне, где цвет соответствует в excel.Возвращаемый индекс ячейки на основе цвета ячеек в Excel

MatchColour

я придумал приведенный ниже код VBA, но он не работает.

Function MATCHCOLOUR(rColor As Range, rRange As Range) As Long 

Dim lCol As Long 
Dim vResult As Long 

lCol = rColor.Interior.Color 

If rRange.Interior.Color = lCol Then 
    vResult = rRange.ColumnIndex 
End If 

MATCHCOLOUR = vResult 

End Function 

Образец Результат: MATCHCOLOUR(A1,B1:B10) должен вернуть 5 (т.е. ColumnIndex), где цвет A1 и B5 матч.

+0

Мне очень жаль, но ваш экран выстрел не соответствует вашему образцу результат с использованием вашей формулы, можете ли вы показать пример данных, который имеет значение? –

+0

Я никогда не слышал о '.ColumnIndex'. Возможно, вы имеете в виду '.Column'? –

+0

В вашем примере результата, если B5 и A1 имеют один и тот же цвет, а результат, который вы ищете, равен 5, то вы имеете в виду 'Rows', а не' Columns', и должно быть 4, а не 5, No? –

ответ

2

Я не уверен, что параметр, который вы пытаетесь получить от вашей UDF, так что мой код ниже содержит несколько из них.

Во-первых, вам нужно перебрать ваши Range.Cells, в моем коде я предполагал, когда был матч, вы читали Column (или) и Exit петлю, клетки For.

Во-вторых, есть несколько возможных результатов вы могли бы получить, давайте использовать Sample результат, MATCHCOLOUR(A1,B1:B10) и сотовый B5 имеет тот же цвет имеет ячейки A1:

Abosulte Колонка: номер столбца B5 >> Retruns 2

относительная колонка: относительное число столбец B% до А1 >> Retruns 1

Абсолютный Ряд: число строк B5 >> Retruns 5

Относительная Роу: относительный номер строки B5 к A1 >> Retruns 4


код

Function MATCHCOLOUR(rColor As Range, rRange As Range) As Long 

Dim vResult As Long 
Dim c As Range 

For Each c In rRange.Cells 
    If c.Interior.Color = rColor.Interior.Color Then 
     ' getting the absolute column number of the match in the Range 
     vResult = c.Column 

     ' getting the absolute column number of the match in the Range 
     vResult = c.Row 

     ' getting the relative columns number of the match in the Range and current cell 
     vResult = c.Column - rColor.Column 

     ' getting the relative rows number of the match in the Range and current cell 
     vResult = c.Row - rColor.Row 

     Exit For 
    End If 
Next c 

MATCHCOLOUR = vResult 

End Function 

Итак, запустите это Функция, при попытке получить абсолютную строку первого вхождения клетки цвета совпадает, ячейка B5 >> вернется 5:

enter image description here

0

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

Function MATCHCOLOUR(rColor As Range, rRange As Range) As Long 

    Dim lCol As Long 
    Dim vResult As Long 
    Dim vFound As Long 

    lCol = rColor.Interior.Color 
    vResult = 0 
    vFound = 0 

    For Each rCell In rRange.Cells 
     vResult = vResult + 1 
     If rCell.Interior.Color = lCol Then 
      vFound = 1 
      Exit For 
     End If 
    Next 

    If vFound = 0 Then 
     MATCHCOLOUR = 0 
    Else 
     MATCHCOLOUR = vResult 
    End If 

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