复杂的Vlookup / VBA函数或macros所需的“如果包含文本,然后查找”

我有一个问题, http://goo.gl/i82eA这是我有所需的输出的示例数据。 目前我有一个用户定义的函数,手动使用许多if语句来完成这个工作,但是我希望能够做一些类似于vlookup的工作,如果它在colum中find某个特定的颜色并返回相应的颜色映射。

或者像使用filter函数一样过滤所有包含蓝色的单元格,并给目标单元格添加蓝色,然后使用颜色表中的下一个值运行下​​一个filter。


 Color ColorMap文本所需的输出
蓝色深蓝色鞋子蓝色(如果文字包含蓝色返回蓝色)
红色红色深红色红色(如果文字包含红色红色)等
棕褐色棕褐色鞋棕色
海军蓝色海军军营鞋蓝色
绿玉玉绿鞋
梅红色梅红色鞋多彩多姿(如果文本包含多于1色返回多彩多姿)

所以input的数据应该是2列,要查找的数据是1列,如果它的function是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 

这将查找Text值并返回ColorMap值; 如果发现多个匹配,则返回“多色”。 注意:这是一个数组公式 – 用Ctrl + Shift + Enterinput。

=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))

这是一个function,做同样的事情。 它要求参考表是一个命名的范围。 调用这个函数: =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