分享

收藏!很难但很好用的出库单打印模板

 Excel不加班 2019-12-26

与 30万 读者一起学Excel

两个学员同时受到这个问题的困扰,一个大半夜、一个天刚亮就在找卢子想办法解决。

企业有库存明细表,每天要出库的时候,都要根据当天的出货情况分客户打印出库单,以前都是手工一笔一笔录到送货单模板再打印,觉得比较麻烦,请老师帮忙看一下。

出库明细

打印模板

第一张为出库明细,往后是各个客户的送货单。现在要根据出库明细自动生成出货单:

1、黄色部分:客户名称、日期变动,蓝色区域自动更新。

2、每张出库单限定打印5行,如果一个客户当天明细超过5行,自动生成第二张送货单,以此类推,目的为了方便固定格式打印。

例:客户1,3月22日有11条记录,就生成了3张出库单。

其实,这个问题就是根据客户和日期两个条件,查找所有符合条件的值。这种有一个经典的公式,叫筛选公式。

在B8输入公式,按Ctrl+Shift+Enter三键结束,下拉和右拉。

=IFERROR(INDEX(出库明细!D:D,SMALL(IF((出库明细!$A$2:$A$600=$B$4)*(出库明细!$B$2:$B$600=$C$5),ROW($2:$600)),ROW(A1))),"")

这个公式,卢子初学Excel的时候,花了很长时间才掌握里面的精髓。让你看一遍就能掌握,确实有点为难你。我现在将里面的关键套路解释一遍。

套路:

=IFERROR(INDEX(返回区域,SMALL(IF(条件,ROW(行号)),ROW(A1))),"")

返回区域,就是你要得到哪一列的值,如果是出库明细的D列,就写出库明细!D:D。

条件,这里可以是单条件,也可以是多条件。单条件就用区域=查找值,多条件就用(区域1=查找值1)*(区域2=查找值2)*(区域n=查找值n),条件要用括号表示,用乘号表示同时满足的意思。

行号,区域涉及到多少行就写多少行。如区域是出库明细!$A$2:$A$600,行号就写ROW($2:$600),一一对应。

IF(条件,ROW(行号)),就是满足条件,返回本身的行号。

SMALL(IF(条件,ROW(行号)),ROW(A1)),返回满足条件的最小行号,通过下拉公式,就变成倒数第2小,第3小,直到所有行号查找出来。

INDEX(返回区域,SMALL(IF(条件,ROW(行号)),ROW(A1))),返回行号本身的对应值。

=IFERROR(INDEX(返回区域,SMALL(IF(条件,ROW(行号)),ROW(A1))),""),让对应值显示本身,错误值显示空白。

解释完套路,把接下来的公式都改完。每个模板只允许打印5行,如果超出的,就在下面的模板依次设置公式再继续打印。

第2个模板,就将ROW(A1)改成ROW(A6)。

同理,第3个模板,就将ROW(A1)改成ROW(A11)。

到此,问题就说完了,剩下的就是不断的练习。没有人,天生就是高手,都是练出来的。

https://pan.baidu.com/s/1qf4Si06wFFXJYhWFHzsE8Q 

作者:卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多