2011-12-13 59 views
1

我有一个问题,http://goo.gl/i82eA这是我有所需的输出样本数据。目前我有一个用户定义的函数,它手动使用许多if语句来完成这项工作,但是我希望能够做一些类似于vlookup的工作,如果它在colum中找到某种颜色并返回与之相关的颜色映射。复杂的Vlookup/VBA函数或宏需要“如果包含文本,然后查找”

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

 

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列是目标列,如果其功能

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 

回答

4

这将查找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 
+0

哇!谢谢!!那个作品真棒,你能为我打破这个公式吗?有没有办法让我变成一个函数? 我该如何获得vba等价物? 再次感谢!!!!!!!!!!!!!!!!! – Alfred

+0

更新后的版本处理“多色”返回值。你还需要一个功能吗?如果是这样,那可能更直接,但当然需要VBA和宏的启用。 –

+0

嗨Rachel,嗯,我试过这个公式..但是它没有给梅花红鞋多彩 - 只给红色。谢谢!是的一个功能会更容易,宏启用是没有问题的! – Alfred

相关问题