多语言展示
当前在线:1934今日阅读:155今日分享:35

取上月期末数---EXCEL-VBA-公式-函数应用

分要分享一下取跨表动态取上期结存数的思路,实现统计月份期间和取上月期末数
工具/原料
1

熟悉EXCEL基本操作

2

具备一定的函数基础,会使用到的公式主要有:text ,substitute,mid,cell,find,indirect,vlookup等

方法/步骤
1

6月份的结存数,在7月份中为期初数,思路如下:通过VLOOKUP公式来查找上月份对应产品的期末数,公式在每个表中都要适用,所以引用的区域是要动态的,不需要每次修改公式,所以我们得观察表格设置及维护的特点。本人觉得接下来的步骤才是分享的主要经验:

2

通过观察,每张工作表都是数字+月份的特色,我们通过Indirect公式来构建一个VLOOKUP查找区域的动态区域,如‘6月'!A1:M100,在七月的库存表就要引用六月的期末数,我们要取到“6月”,可以通过取7月的表名减1来实现,接下来是如何取到表名呢?

3

=CELL('FILENAME',A1)可以取到工作簿的名称,来个例子给大家看下,图可以看到,完整的工作表存放路径,我们只要取到7月就可以了,7月前现有“]',通过FIND公式来查找”]'的位置

4

=FIND(']',CELL('FILENAME',A1))查找”]'公式结果查到了,在41字符处,找到位置后,我们要表名取出来,使用MID函数可以达到这个目的

5

请看图4,我们通过MID函数把表名取出来了,找到”]'位置后,往后一位是我们要的内容,所以+1,取的长度正常3就够了,表名命名规则就是数字+月,例子中我们随意用了15.取到表名,我们要在取上月数,所以我们要把7改为6,那就是把月份取出来减1咯,请看下一步

6

图5,取月份有多种方法,本例,采用SUBSTITUTE函数,将月份替换为空值“”,这样就得到7,然后减去1,就可以得到6了,我们这么辛苦将6取出来,就是为了在INDIRECT函数中使用它,构建一个动态的引用区域供VLOOKUP使用。请看下一步:

7

图5已经取到数字6了,接下来通过INDIRECT来实现一个被VLOOKUP查找的区域,引用工作表的路径是‘6月'!A1,这是单个单元格的,区域就是6月'!A1:L1000,例子请看图6,离目标只有最后两步远了咯

8

图7我们可以看到,使用了VLOOKUP公式,查找区域,就是红色边框的部分,用INDIRECT生成的区域,为了不去数到底在第几列,我采用了COLUMN(K5)来代替,COLUMN()会产生所在单元格的列号,本例K5是我们的目标列号

9

VLOOKUP,查找不到时,会产生N/A#,为了报表美观,用IFERROR函数进行美化处理,如果错误就用0显示,请见图8的结果

注意事项

表名要由数字+月组成,公式可以直接复制不需要修改可直接使用,

推荐信息