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