复杂的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