参考链接: 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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。