通过VLOOKUP函数由Sheet2价格表得到目的省份对应的首重价、首重量、续重价,并通过IF函数建立首重量与A2条件重量的判断。在C2单元格输入=IF(A2>VLOOKUP(B2,Sheet2!A:D,3,0),VLOOKUP(B2,Sheet2!A:D,2,0)+(A2-VLOOKUP(B2,Sheet2!A:D,3,0))VLOOKUP(B2,Sheet2!A:D,4,0),VLOOKUP(B2,Sheet2!A:D,2,0)) 表示:如果A2大于对应省份的首重量,则在价格表的B列返回B2单元格对应的首重价+(A2单元格-对应B2单元格的首重量)对应B2单元格的续重价;否则返回对应的首重价。 注意:为了方便查找引用数据及进行数据比较,Sheet2的价格表中的数据必须以数值型存在,以文本形式存在会引起计算错误,或增加公式的书写难度。比如说C列的2kg,这种表达,需要在原公式基础上增加一个LEFT函数,变为=IF(A2>LEFT(VLOOKUP(B2,Sheet2!A:D,3,0)),VLOOKUP(B2,Sheet2!A:D,2,0)+(A2-LEFT(VLOOKUP(B2,Sheet2!A:D,3,0)))VLOOKUP(B2,Sheet2!A:D,4,0),VLOOKUP(B2,Sheet2!A:D,2,0)) 首重价与续重价如果加上货币符号,也会增加公式输入的难度,需要截取货币符号右侧的数字。
如果假设到达地、重量分别在I、J单元格,运费在K列生成,K列的函数公式
=IF(J:J<=1,INDEX(C:C,MATCH(I:I,B:B,0)),IF(J:J<=9,INDEX(C:C,MATCH(I:I,B:B,0))+INDEX(D:D,MATCH(I:I,B:B,0))IF(J:J-INT(J:J)<=02,INT(J:J)-1,ROUNDUP(J:J,0)-1),INDEX(C:C,MATCH(I:I,B:B,0))+INDEX(E:E,MATCH(I:I,B:B,0))IF(J:J-INT(J:J)<=02,INT(J:J)-1,ROUNDUP(J:J,0)-1)))
本公式已验证,楼主依据实际单元格调整公式。
望采纳!
你这样的没有完整的行列标注号没有办法设置公式的呀!!!
如上图,可在B4单元格输入公式:
=VLOOKUP(B2,$J:$K,2,0)+MAX(0,ROUNDUP(B3-15,0))INDEX($L:$Q,MATCH(B2,$J:$J,0),MATCH(B3,{-1,30,70,300,500,1000}))
其中,重量15及以下是按K列计费的,超出15以上部分KG数值按L:O列对应的单价数相乘而得的。 公式已经对超出15KG以上部分不足1KG的按1KG进位 *** 作了。
1、在I2单元格输入公式:=VLOOKUP(H2,A:E,IF(I2<=1,2,IF(I2<=2,3,IF(I2<=3,4,5))),FALSE)+IF(IF(I2<=1,2,IF(I2<=2,3,IF(I2<=3,4,5)))=5,D2+(I2-3)E2,0)
2、往下填充即可。需要注意的是A列和H列的名称须一致。
如图:
通过VLOOKUP函数由Sheet2价格表得到目的省份对应的首重价、首重量、续重价,并通过IF函数建立首重量与A2条件重量的判断。
在C2单元格输入=IF(A2>VLOOKUP(B2,Sheet2!A:D,3,0),VLOOKUP(B2,Sheet2!A:D,2,0)+(A2-VLOOKUP(B2,Sheet2!A:D,3,0))VLOOKUP(B2,Sheet2!A:D,4,0),VLOOKUP(B2,Sheet2!A:D,2,0))
表示:如果A2大于对应省份的首重量,则在价格表的B列返回B2单元格对应的首重价+(A2单元格-对应B2单元格的首重量)对应B2单元格的续重价;否则返回对应的首重价。
注意:为了方便查找引用数据及进行数据比较,Sheet2的价格表中的数据必须以数值型存在,以文本形式存在会引起计算错误,或增加公式的书写难度。
比如说C列的2kg,这种表达,需要在原公式基础上增加一个LEFT函数,变为=IF(A2>LEFT(VLOOKUP(B2,Sheet2!A:D,3,0)),VLOOKUP(B2,Sheet2!A:D,2,0)+(A2-LEFT(VLOOKUP(B2,Sheet2!A:D,3,0)))VLOOKUP(B2,Sheet2!A:D,4,0),VLOOKUP(B2,Sheet2!A:D,2,0))
首重价与续重价如果加上货币符号,也会增加公式输入的难度,需要截取货币符号右侧的数字。
这个是表间引用的概念,我接触较多,多说几句。
你那个需求,用excel实现不难,先弄2个表:一个运费单价表,一个快递单表。前者记录运费单价,即每个地区每公斤的运费;后者记录每笔快递单,包括地区、重量、收件人等。再依据快递单中的地区,用vlookup函数从单价表找出运费单价,引用到快递单,再用重量单价,即可得到运费。
但这里面有一个问题,不知你想到没有。如果以后运费单价调整了,快递单中的单价都会跟着调整,会把新值引用过来,这是不对的。因为以前快递单早已完结,当时的单价就是当时的单价,现在跟着修改,实际就是篡改历史。数据被篡改了,就不真实了。
因此,对于表间引用,除了始终引用外,应该加一个方式:断开式引用。即:对于快递单来说,每录入一笔新单子,会把单价引用过来,但此后就与单价表断开,单价表以后修改,不应把新值引用过来,而是保留旧值。这个断开式引用的概念,是华创网表引入的新概念,与常规excel不同点在于,它还允许多用户同时登录使用。
结论:如果你的需求仅仅是算运费,过往数据是否正确无所谓,就用excel的vlookup实现。如果你还想把过往数据管好,以后还要用于查询、统计分析等,就用华创网表。
*** 作上不难,只是你的数据结构格式不规范,导致公式难度加大了很多很多!
特别是图2的数据结构,居然没有行列标号的!也没有工作表名称!不知道这个数据是不是在一个文件中的!
下面就按你的数据结构举例说明:
数据结构真的 很重要!!!
在上面的数据结构表格中,只要在H3单元格输入公式:
=IF(E3=0,"",MAX(INDEX($Q:$Q,LOOKUP(1,0/FIND(D3,$K:$K),ROW($K:$K)-2)),G3+SUMPRODUCT(TEXT(E3-{0,100,300,500,800},"0;!0")OFFSET($L:$P,9+LOOKUP(1,0/FIND(D3,$K:$K),ROW($K:$K)-2),0))))
就可以得到你想要的核算结果了!
若是你现有的结构表格,给你的公式都会复杂很多,而且真没有办法直接使用的!!!
这个问题的核心在于如何根据目的地和重量提取出对应的价格,可以使用Excel中的Macth和Index函数嵌套来解决,下面用“目的地:浙江,货重:238kg”的订单来说明。
第一步:先将你的价格图转化成标准的Excel表,重量区间部分取起始重量,目的地列中的合并类需要拆分开。比如浙江/江苏/上海需要拆分成3行。做好像这样(图中价格仅作为举例)
转化好的价格图
第二步:使用Match函数算出“测试订单”中浙江在目的地列所在的位置
目的地位置
函数=MATCH(A14,$A$3:$A$10,0)
其中$A$3:$A$10目的地区域,需要绝对引用,0代表精确查找,结果会返回3
第三步:使用Match函数算出“测试订单”中货重238kg在价格区间区域所在的位置
货重位置
函数=MATCH(B14,$C$2:$J$2,1)
其中$C$2:$J$2为价格区间区域需要绝对引用,1代表小于。结果会返回4
第四步:使用Index函数提取对应的价格
函数=INDEX($C$3:$J$10,C14,D14)
其中$C$3:$J$10为价格区域需要绝对引用,C14,D14分别代表算上面两个步骤算出的价格区域中的行和列,结果返回38
可以将第二步和第三步融合到一起
函数=INDEX($C$3:$J$10,MATCH(A14,$A$3:$A$10,0),MATCH(B14,$C$2:$J$2,1))
第五步:用价格计算公式算出价格
函数=E14INDEX($C$3:$J$10,MATCH(A14,$A$3:$A$10,0),MATCH(B14,$C$2:$J$2,1))+10
结果返回9144
结尾:这个我已经尽量很详细的描述了,本着“授人以鱼不如授人以渔”的原则还希望你能好好学习一下里面的函数用法。然后还可以使用Vlookup+Match来提取价格,原理基本相似。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)