夜雨聆风学习资料网

ARTICLE · 1266701

Excel 函数与公式 -- 内容搜索(六)

Excel 函数与公式 -- 内容搜索(六)
前面我们讨论了 XLOOKUP 函数的一般格式和用法,今天我们继续讨论 XLOOKUP。
Excel 对日期的处理
日期时间数据在 Excel 内部表示为双精度浮点数(Double类型),而在单元格上可以设置日期时间的显示格式,如果不设置显示格式,则直接显示日期时间的内部表示。如例1所示。
例1. 日期的显示
图1 日期的显示
在这个例子中,左边数据表中的最后一栏是日期数据,单元格的显示格式设置为 yyyy-mm-dd。在右边的查询面板中,第一行的日期单元格设置了显示格式,第二行没有设置,因此直接显示 1963-07-02 这个日期的内部数据表示。
G2、G2 单元格的查询公式是一样的,区别只在于 I2、I3 单元格的设置。
还有一种方法是改变 XLOOKUP 函数查询的结果,将日期数据直接格式化为需要的显示格式,这需要写一段 VBA 代码,如图2所示。
图2 MyXLookup 定制函数
这段代码定义了我们自己的查询函数 MyXLookup,该函数内部调用了 Excel 的 XLOOKUP,然后对 XLOOKUP 函数的查询结果进行遍历,对其中的日期型数据进行格式化。
因为 MyXLookup 函数已经对日期型数据进行了格式化,因此不再需要设置单元格的显示格式,如例2所示。
例2. MyXLookup 函数的用法示例
图3 MyXLookup 用法示例
这个例子使用的公式(G2)是:=MyXLookup(F2, C2:C13, B2:D13)。由查询结果可见,I2 单元格的日期数据已经被格式化为 yyyy-mm-dd 的格式。
由这个例子也可以看出,XLOOKUP 可以查询数据表中任何一列,可以返回包含该列某个单元格所在的一整行。所以,XLOOKUP 不再受方向限制,完全超越了 HLOOKUP/VLOOKUP 只能进行单方向查询的限制。
除此之外,XLOOKUP 还支持通配符查询。
XLOOKUP 的通配符查询
XLOOKUP 的 lookup_value 参数支持通配符:
  • 星号(*):匹配任意多个字符。
  • 问号(?):匹配任意单个字符。
  • 波浪号(~):转义字符,匹配单元格中的星号(*)、问号(?)和波浪号(~),也就是说,波浪号将后面跟随的*、?、~ 转义为普通字符。如果单元格中的内容包含 *、?、~,譬如 "You?",要精确匹配这个字符串,就需要写成 "You~?"。
例3. 通配符查询
图4 通配符查询
在这个例子中,我们使用了通配符查询。F2 单元格的查询条件是 “Sara*”,我们看到,左侧数据表中有两个叫 Sara 的员工:Sara Davis 和 Sara Smith。XLOOKUP 的查询策略是:找到第一个符合条件的结果就返回。
这个例子告诉我们:在查询文字单元格时,不需要给出完整的内容,可以使用星号(*)来做模式查询,这样可以节省输入一些打字输入。
使用通配符查询时,必须通过指定 match_mode 参数告诉 XLOOKUP。match_mode 参数的 0、-1、1 三个值都是执行精确匹配,只有参数值 2 才是执行通配符匹配。因为 XLOOKUP 的后三个参数都是可选参数,当指定后面的参数,前面的可选参数如果不指定,也必须要用逗号(,)隔开,如本例的公式:
=XLOOKUP(F2, B2:B13, B2:D13, , 2)
这个公式中最后的 2 是 match_mode 参数,前面有一个可选参数 if_not_found,但公式中并没有指定该参数,仍然需要用逗号指明前面有个未指定的参数。
例4. 通配符查询2
图5 通配符查询2
假设一个新员工尚没有分配具体的岗位,因此其职位一栏显示为问号(?)。现在要找出这样的员工,即查找职位栏为 ? 的员工。
因为问号(?)是元字符,要想匹配问号字符,必须对问号进行转义,方法是在问号前面冠以波浪号,即指定查询条件为:~?。
这个例子中,因为 Steve Jackson 的职位只有一个字符:?,所以将 F2 单元格的内容指定为 ? 也是可以的。但此时这里的 ? 是元字符,匹配任意一个字符,因为 C9 单元格只有一个字符,所以也可以找出所要的结果。
结论是:~? 精确匹配问号字符,? 只匹配单一字符,不管是问号还是其他什么字符。
相关阅读
Excel 函数与公式 -- 内容搜索(一)
Excel 函数与公式 -- 内容搜索(二)
Excel 函数与公式 -- 内容搜索(三)-- HLOOKUP/VLOOKUP
Excel 函数与公式 -- 内容搜索(四)
Excel 函数与公式 -- 内容搜索(五)

相关学习资料