参考链接: 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
原创文章,作者:306829225,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/245648.html