复杂的Vlookup / VBA函数或宏需要“if contains text then vlookup”

时间:2011-12-13 06:39:48

标签: excel vba excel-vba vlookup

我遇到了问题,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 个答案:

答案 0 :(得分:3)

这将查找Text值并返回ColorMap值;如果找到多个匹配,则返回“multicolored”。注意:这是一个数组公式 - 使用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