早就知道VLookup是Excel里面最重要的一个函数(据说已经有个新的XLookup替代者),用于在一块数据中,按照某个列查找数据,今天正好遇到类似问题,查询了一下微软文档(https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheetfunction.vlookup),一下子就用上了,非常简单,但是遇到了2个小问题,记录下来:
一、在精确查找一个工号的时候,发现明明数据是对的,但是查找不到
公式:VLOOKUP(D6,MySheet!$C$1:$C$202,1, FALSE)
仔细研究才发现,原来是数据块MySheet!$C$1:$C$202中,工号的后面有空格,造成匹配失败,如果一个一个删除,显然又太复杂,然后就用了一下UE的列模式,迅速搞定
二、VLookup在查找不到的时候,返回值是NA,匹配成功则返回原值,需要使用一个Excel的ISNA()函数来转化一下
公式:=IF(ISNA(VLOOKUP(D6,MySheet!$C$1:$C$202,1, FALSE)), “”, 1)
其实这个VLookup基本上类似于SQL的 Select xxx from Table where col=xxx,比较好奇的是,如果Excel中如果每个各自都要计算,而且要实时更新,很可能用了特殊的数据结构
微软文档:https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheetfunction.vlookup
语法
表达式。VLookup(Arg1、 Arg2、 Arg3、 Arg4)
_表达式_一个代表**WorksheetFunction** 对象的变量。
参数
名称
必需/可选
数据类型
说明
Arg1
必需
Variant
Lookup_value – 要在表数组的第一列中搜索的值。 Lookup_value 可以是一个值,也可以是一个引用。 如果 lookup_value 小于 table_array 第一列中的最小值, 则VLookup将返回 #N 的/a 错误值。
Arg2
必需
Variant
Table_array – 两列或更多列的数据。 使用对区域或区域名称的引用。 table_array 的第一列中的值是按 lookup_value 搜索得到的值。 这些值可以是文本、数字,也可为逻辑值。 文本不区分大小写。
Arg3
必需
Variant
Col_index_num – 必须从中返回匹配值的 table_array 中的列数。 如果 col_index_num 为 1,则返回 table_array 的第一列中的值;如果 col_index_num 为 2,则返回 table_array 的第二列中的值,依此类推。
Arg4
可选
Variant
Range_lookup-一个逻辑值, 用于指定是希望VLookup方法查找精确匹配值还是近似匹配项。
返回值
Variant
说明
VLookup 中的 V 表示垂直方向。 当比较值位于要查找的数据左侧的列时,可使用 VLookup 方法,而不是 HLookup 方法。
如果 Col_index_num 小于 1,则 VLookup 方法将生成错误。
如果 Col_index_num 大于 table_array 中的列数,则 VLookup 方法将生成错误。
如果 Range_lookup 为True或被省略, 则返回精确匹配或近似匹配。 如果找不到精确匹配值,则返回下一个小于 lookup_value 的最大值。 table_array 的第一列中的值必须按降序排列;否则,VLookup 方法可能不会返回正确的值。
如果 Range_lookup 为False, 则VLookup方法将仅查找完全匹配项。 在本例中,无需对 table_array 的第一列中的值进行排序。 如果 table_array 的第一列中的两个或更多值与 lookup_value 相匹配,则使用所找到的第一个值。 如果找不到精确匹配值,则生成错误。
在 table_array 的第一列中搜索文本值时, 请确保 table_array 的第一列中的数据没有前导空格、尾随空格、直'
(or "
) 和卷曲 (‘
或“
) 引号的使用不一致标记或非打印字符。 在这些情况下, VLookup方法可能会给出不正确或意外的值。 要了解如何清理或剪裁值,请参阅 Clean 和 Trim 方法。
在搜索数字或日期值时,请确保 table_array 第一列中的数据未存储为文本值。 在此情况下,VLookup 方法可能给出不正确或非预期的值。
如果 range_lookup 为False且 lookup_value 为文本, 则可以在 lookup_value 中使用通配符、问号 (?) 和星号 (*)。 问号可匹配任意的单个字符;星号可匹配任意一串字符。 如果要查找实际的问号或星号,则请在该字符前键入一个波形符 (~)。