欢迎转发和点一下“在看”,文末留言互动!
置顶公众号或设为星标及时接收更新不迷路
朋友们好,这里是EXCEL应用之家,坚持分享EXCEL操作技巧。
今天来和朋友们分享一道查找题目。原题是这样的:
题目要求根据快递公司名称和目的地来找出对应的运费。今天这道题目,将会分享3条公式,供大家参考和借鉴。
01
FREQUENCY函数法
在单元格R4中输入下列公式,并向下填充。
=LOOKUP(,0/FREQUENCY(0,ABS(P4-D$1:K$1)),OFFSET(D$1:K$1,MATCH(O4,C$2:C$32,),))
这也是FREQUENCY函数的经典应用了。过去介绍过很多类似的例子,今天稍稍再讲一下。
OFFSET(D$1:K$1,MATCH(O4,C$2:C$32,),)
OFFSET函数嵌套MATCH函数返回目的地在源数据中所在的行区域。
FREQUENCY(0,ABS(P4-D$1:K$1))
利用FREQUENCY函数在实际重量和价格重量差值最小的那个数据计频。
LOOKUP(,0/FREQUENCY(0,ABS(P4-D$1:K$1)),OFFSET(D$1:K$1,MATCH(O4,C$2:C$32,),))
最后利用LOOKUP函数返回对应的运费。
02
XLOOKUP函数嵌套FILTER函数
在单元格R4中输入下列公式,并向下填充即可。
=XLOOKUP(0,ABS(P4-D$1:K$1),FILTER(D$2:K$32,C$2:C$32=O4),,1)
XLOOKUP函数的语法结构如下:
=XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode])
lookup_value:必需项,要查找的值
lookup_array:必需项,要查找的数组或区域
return_array:必需项,要返回结果的数组或区域
[if_not_found]:可选项,找不到时的替代文本
[match_mode]:匹配类型,有多种选择
[search_mode]:搜索方式,也有多种选择
FILTER(D$2:K$32,C$2:C$32=O4)
利用FILTER函数返回目的地所在那一行的数据,这部分的返回值是{5,6,7,8,9,10,11,1.25}。
ABS(P4-D$1:K$1)
实际重量和价格重量的差值,这部分的返回值是{4,3,1.8,1.5,0.8,0.5,0.2,0.21}。
XLOOKUP(0,ABS(P4-D$1:K$1),FILTER(D$2:K$32,C$2:C$32=O4),,1)
XLOOKUP函数的第五参数是1,表明是精确匹配或者下一个较大的项。这里XLOOKUP函数查找0,查找区域中没有0,因此查找下一个较大值,也就是大于0的最小值,0.2,然后返回对应的数值11。

你看这是不是和LOOKUP函数有些像呢!
03
INDEX函数嵌套SORTBY函数
在单元格R4中输入下列公式,并向下填充。
=INDEX(SORTBY(XLOOKUP(O4,C$2:C$32,D$2:K$32),ABS(D$1:K$1-P4)),1)
这条公式中XLOOKUP函数的用法上一条我们已经介绍过了,这里着重讲一讲SORTBY函数。
SORTBY函数的语法结构如下:
=SORTBY(array, by_array1, [sort_order1], [by_array2, sort_order2],…)
Array:必需项,要进行排序的数组或区域
by_array1:必需项,要对其进行排序的数组或区域
[sort_order1]:要用于排序的顺序。1 表示升序,-1 表示降序。 默认为升序
XLOOKUP(O4,C$2:C$32,D$2:K$32)
利用XLOOKUP函数返回需要排序的数组。
ABS(D$1:K$1-P4)
实际重量和价格重量的差值。
上面XLOOKUP函数的结果要根据这一条排序的顺序来排序。默认是生序排序。
SORTBY(XLOOKUP(O4,C$2:C$32,D$2:K$32),ABS(D$1:K$1-P4))
SORTBY函数返回的结果是{11,1.25,10,9,8,7,6,5}。
INDEX(SORTBY(XLOOKUP(O4,C$2:C$32,D$2:K$32),ABS(D$1:K$1-P4)),1)
INDEX函数返回正确答案。
本期内容练习文件提取方式:
链接: https://pan.baidu.com/s/1hBjc4_wJne6C-FphUlQvfw?pwd=w4bv 提取码: w4bv
我就知道你“在看”