查看原文
其他

发现一个VLOOKUP新用法,高兴得多干了两碗饭!

小爽 秋叶Excel 2023-09-24

点击蓝字【秋叶 Excel】👆

发送【礼包】

免费领办公神器、Office 模板和免商字体!


本文作者:小爽本文编辑:竺兰

小型物流公司会有托运业务,一般会有指定的线路,在指定时间内进行运输配送。有些商家可能会采取托运方式进行发货,将货品提前放在物流公司,公司统一发货到达目的地。


托运的价格有些是按照体积计算,不同路线,不同体积会有不同价格。


由于同个路线可以进行合并一个车发货,所以有一种计价方式,是依据合并的体积进行计价。


如下图:现在,我们需要计算出客户的报价。



完成这个效果,只需要编写函数公式,这里会涉及使用到三个函数。


下面,我们一起来看看。



sumif 函数,对相同路线,进行汇总求和。
由于具体报价是对同个路线汇总后,再进行查询的。所以在利用查询函数查询之前,我们需要先用 sumif 函数按条件(相同路线)对体积进行汇总求和。
公式如下:
=SUMIF($B$2:$B$33,B2,$C$2:$C$33)


sumif 函数的语法规则:=sumif(条件区域,条件,求和区域)
对应的也就是 :条件区域:$B$2:$B$33, 城市这一列条件:B2, 江门佛山求和区域:$C$2:$C$33,体积列。
汇总之后,我们需要将体积跟区间进行查询匹配。
match 函数,匹配对应位置。
由于参数表是一个二维表,也就是我们需要进行交叉匹配。这里我们先使用 match 函数匹配对应体积区间(0,5,10,20,50)的位置。

公式如下:
=MATCH(  SUMIF($B$2:$B$33,B2,$C$2:$C$33),  $H$1:$L$1,  1)


match 函数主要用来匹配位置的。=MATCH(查找值,查找范围,查找类型)
第三参数中,查找类型有三种方式:0 精确匹配1 小于-1 大于

对应公式:查找值:sumif 汇总后的值查找范围:$H$1:$L$1,不同体积数的列表查找类型:1 小于。比如说 0-5 这个区间内,体积数值是 2 返回 0 这一列的位置,所以这里要写小于也就是 1。

match 函数得出的数值+1,对应的位置就是 vlookup 函数中的第三参数——结果需要返回的列数。
所以下面我们用 vlookup 函数查询最终结果。
vlookup 函数,返回符合条件的值。
利用 vlookup 函数查询每个路线下的价格。
公式如下:
=VLOOKUP( B2, $G$2:$L$13, MATCH(SUMIF($B$2:$B$33,B2,$C$2:$C$33),$H$1:$L$1,1)+1, 0)


=VLOOKUP(要查找的值,查找区域,要返回的结果在查找区域的第几列,精确匹配或近似匹配)
要查找的值:B2 ,江门佛山查找区域:$G$2:$L$13 参数表要返回的结果在查找区域的第几列:根据 match 函数所得的列数+1。因为列数从查找列开始数的,所以需要加上 1。精确匹配或近似匹配:0 精确匹配。
现在,对应的报价就得出来了。

总结一下

本文讲解的是,按条件汇总值后,进行交叉近似匹配的公式编写。
❶ sumif 函数先汇总同路线的值;
❷ 针对 sumif 函数得出的结果,利用 match 函数去匹配不同体积数(0,5,10,20,50)的相对位置;
❸ 用 vlookup 函数返回最终结果,match 函数+1 得出的结果就是 vlookup 第三参数的列数。
整个完成的过程并不难,这里的关键在于,对需求进行拆解后,利用函数工具,去一步步完成我们的所需效果。
当然,有些小伙伴可能不想局限于函数做法,下面我来小小的延伸一下 M 函数做法。有兴趣的小伙伴可以在文末领取源文件研究。

函数在查找匹配的方面,其实是优于 pq 匹配的方法的。因为查找函数有对应的查找区域,以及对应的匹配区域。而 pq,返回匹配值,需要对应的索引值。
下面,是我简单写的 pq 方法,有兴趣的小伙伴可以自己去拆解一下。

let 源 = Excel.CurrentWorkbook(){[Name="表 1"]}[Content], lst = List.Transform(List.Skip(Table.ColumnNames(表 2)),Number.From), result = Table.AddColumn(源, "报价", each let data=Table.Group(源,"城市",{{"a",(x)=>List.Sum(x[#"体积(方)"])}}){[城市=_[城市]]}, para=Record.ToList(表 2{[线路=data[城市]]}), c=List.Count(List.Select(lst,(z)=>z<=Number.From(data[a]))) in para{c})in result

好了,关于文章还有什么不懂的,小伙伴们可以留言,一起来聊个五毛钱的~


Excel 操作简单、应用广泛,如果你想系统学习,让你的工作能力有机会增强 10 倍!


那就赶紧点击下方小程序,加入《3 天 Excel 集训营》吧!


现在报名,只需 1 元

还送35 个常见函数使用说明……


速戳下方小程序

加入《3 天 Excel 集训营》吧!



💬



点击下方公众号卡片发送:托运免费领配套案例文件!👇👇👇以上内容包含广告

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存