ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

从一个实例练习中得到的启发,学习函数不在多,在于精

2022-04-18 14:01:03  阅读:42  来源: 互联网

标签:提取 发货 练习 本笔 日期 实例 B2 启发 函数


参考链接: https://gewuweb.com/office365/3134.html

学习函数的目的在于解决实际问题,而非比赛看谁知道的函数更多,能把常用的四五十个函数熟练应用,解决日常工作中碰到的问题已经差不多了。

今天分享一位群友实际工作中碰到的一个问题,希望能给大家带来启发。

下面图片是原始数据单,是从系统里导出来的流向,做了简化,意在说明问题。

第二幅图是想要的格式:

发货日期从第一副图中提取,这个很好解决。

难点在于判断是否返佣。

是否返佣的条件为:

1、本笔记录的发货日期距离今天大于等于2个月。

2、本笔记录的发货日期之后又有至少一次发货记录,即要压着一次发货的钱。

上面两个条件对应的客户名称,存货,规格都是一致的。

上面的意思直白点讲就是你进了我们的货了,我们要给你返佣金,怎么返?进货之后两个月返给你,而且你至少要保证这两个月还有进货,否则你只进了一笔,我把佣金返给你了,你来个退货,那我不傻眼了!

因为这个流向数据是系统里导出来的,所以日期格式带了具体时间,我试过调整格式,调整不过来,朋友原来的做法是直接用left提取前面7位。其实这样是不对的,为啥?图片中的日期都是7位,如是出现17-11-25肯定就会出错。

所以我们应该提取8位,但是提取八位的话,遇到只有6位的,比如17-3-4 上午 12:00,提取结果就是17-3-4 上,连上字也提取出来了,挺头疼的!

思路一:在日期与上午或者下午之间用函数substitute和rept函数插入空格,然后提取。

思路二:是用find函数找到上或者下在日期中的位置,假设结果为n,用left提取位数就是n-1。

我的思路:上面两种思路写函数都比较复杂,干脆简单点,时间里不是上午就是下午,都包含午字,那我们直接找午的位置

在第二副图的B2中输入=FIND("午",流向单!B2),就找到了午的位置。

然后提取

=LEFT(流向单!B2,FIND("午",流向单!B2)-2),这样日期就提取出来了

按照格式表达

=TEXT(LEFT(流向单!B2,FIND("午",流向单!B2)-2),"yyyy-mm-dd")

提取日期圆满成功。

接下来我们看看是否返佣该怎么写公式?

第一个条件本笔发货日期据今天大于等于两个月,这个好办。

第二个条件本笔发货日期以后有发货记录,其实只需要判断客户名称,存货,规格符合条件的日期列中是否有大于本笔日期的数据存在,存在就说明后面有发货,反之就是没发货。

公式:

=IF(AND(SUMPRODUCT(($C$2:$C$7=C2)($D$2:$D$7=D2)($E$2:$E$7=E2)*(($B$2:$B$7)>B2))>1,DATEDIF(B2,TODAY(),"m")>=2),"是","否")

红色部分为第一个条件,本笔日期距离今天是否大于等于2个月;蓝色部分为第二个条件,客户名称,存货,规格相同的情况下,发货日期列中大于本笔日期的个数如果大于1就说名后面有发货,反之就是没发货。

and表示两个条件同时满足。

思路虽然简单,但是里面的数组思维大家得仔细领会。

每天进步一点,每天提升一点!

感谢每一位支持我的读者!!!
参考来源: https://gewuweb.com/sitemap.html

标签:提取,发货,练习,本笔,日期,实例,B2,启发,函数
来源: https://www.cnblogs.com/lihanlin/p/16159352.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有