我有以下工作表,其中有一列包含数字列表,还有一列包含名称
124, 3, 7, 1, 41 Sarah
9, 76, 161, 8 Chris
91, 41, 21, 4, 2 Alan
我希望能够使用 VLOOKUP 对列进行搜索,以将单个整数与名称进行匹配,如下所示
输出:
1 Sarah
2 Alan
3 N\A
4 Alan
...
这是我所拥有的:=VLOOKUP("*"&A1&"*",Sheet1!A$1:C$3,2,FALSE)
我遇到的问题是它在字符串中找到部分数字,例如
1 在“124”中,因此匹配,但不是完整数字
我该如何解决这个问题?
答案1
答案2
考虑以下用户定义函数:
Public Function pukoolv(v As Variant, r As Range) As Variant
Dim i As Long, temp As String, temp2 As String
arr = r
pukoolv = ""
temp2 = CStr(v)
For i = LBound(arr, 1) To UBound(arr, 1)
temp = Replace(arr(i, 1), " ", "")
brr = Split(temp, ",")
For Each b In brr
If b = temp2 Then
pukoolv = arr(i, UBound(arr, 2))
Exit Function
End If
Next b
Next i
End Function
使用方式如下:
用户定义函数 (UDF) 非常容易安装并使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
到消除UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
到使用Excel 中的 UDF:
=pukoolv(lookup_value,lookup_table)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!
答案3
你可以让你的查找做一些更复杂的事情。例如:
=VLOOKUP("*"&A1&"*",Sheet1!A$1:C$3,2,FALSE)
会成为:
=VLOOKUP("* "&A1&", *",Sheet1!A$1:C$3,2,FALSE)
请注意在形成查找值时在前面的星号中添加的空格A1
以及在后面添加的逗号和空格。A1
完整数字(如“124”)前面会有一个空格,后面会有一个逗号和一个空格,而数字的一部分(如“24”)则不能这样表示。
有了更精准的查找值,您的困难就会完全消失。