Сложная функция Vlookup / VBA или макрос, необходимый для «если содержит текст, то vlookup» - PullRequest
1 голос
/ 13 декабря 2011

У меня проблема, http://goo.gl/i82eA это примерные данные, которые у меня есть с требуемым выводом.В настоящее время у меня есть пользовательская функция, которая вручную использует множество операторов if для выполнения этой работы, но я хочу иметь возможность сделать что-то вроде vlookup, если он найдет определенный цвет в столбце и вернет ядро ​​цветовой карты, соответствующее ему.

Или используйте как функцию фильтра, например, отфильтруйте все ячейки, содержащие синий, и выделите ячейку назначения синим, а затем запустите следующий фильтр со следующим значением в таблице цветов.


Color   ColorMap     Text             Required Output
blue    blue         Deep Blue Shoe   Blue (if Text contains blue return blue)
red     red          Deep red Shoe    red (if Text contains red return red) etc
tan     brown        Tan Shoe         brown
navy    blue         Navy Emp Shoe    blue
jade    green        Jade Shoe        green
plum    red          Plum Red Shoe    multicoloured (if Text contains more than 1 color return multicolored)

Таким образом, ввод долженбыть похожим на 2 столбца для данных, которые нужно искать 1 столбец для поиска, а 1 столбец является столбцом назначения, если это функция

function_name(lookup_text,lookup_table,destination)

Заранее спасибо

ps: воткод, который я сейчас использую

код:

Function Colormap(strVal As String) As String

If (InStr(strVal, "red") > 0) Then
    Colormap = "Red"
End If

If (InStr(strVal, "Beige") > 0) Then
    Colormap = "Beige"
End If

etc..

End Function

1 Ответ

3 голосов
/ 13 декабря 2011

Это ищет значение Text и возвращает значение ColorMap;если найдено более одного совпадения, возвращается «многоцветный».Примечание: это формула массива - введите ее с помощью Ctrl + Shift + Enter.

=IF(SUM(IF(ISNUMBER(SEARCH(A$2:A$7,C2)),1,0))>1,"multicolored",LOOKUP(2^15,SEARCH(A$2:A$7,C2),B$2:B$7))

Вот функция, которая делает то же самое.Требуется, чтобы справочная таблица была именованным диапазоном.Вызовите функцию следующим образом: =ColorMap(C2,"ColorTable"), где ColorTable - это именованный диапазон, относящийся к $A$2:$B$7.

Public Function ColorMap(LookupValue As Variant, LookupTableName As String) As String
    Dim vTable As Variant
    Dim lIdx As Long
    Dim sColor As String

    ' transfer lookup table to 2D range & loop through to find matches
    vTable = Names(LookupTableName).RefersToRange.Value
    For lIdx = LBound(vTable, 1) To UBound(vTable, 1)
        If UCase$(LookupValue) Like "*" & UCase$(vTable(lIdx, 1)) & "*" Then
            sColor = sColor & ", " & vTable(lIdx, 2)
        End If
    Next lIdx
    If Len(sColor) > 2 Then sColor = Mid$(sColor, 3)
    ' map multiple matches to "multicolored"
    If InStr(sColor, ",") > 0 Then sColor = "multicolored"
    ColorMap = sColor
End Function
...