Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1761|回复: 9

汇总数据。遍历文件夹下工作簿加计算问题。谢谢指点。

[复制链接]
发表于 2020-6-28 08:41 | 显示全部楼层 |阅读模式
本帖最后由 ggwfnh 于 2020-7-9 08:41 编辑

现在有几百所学校填报了很多的商品需求数,我现在需要进行类别及价格的汇总。
学校填报上交的需求表里面是没有商品价格的。 我有一张专门的各种商品价格表(这个价格是可以调整的)。
现在我需要自动一键生成一张汇总表。 格式:附件里面的汇总表。请各位大神指点一下,万分感谢。
要求:
1、 遍历文件夹下的所有工作簿(学校需求表),有可能有300到400个相同格式的需求表工作簿,从里面调用相关工作表的数据再跟价格表计算后填入到汇总表。
汇总成300到400个学校的一张汇总表。
2、 主要是资金那个地方,学校的分表里面的各类别需求数要与我提供的一张各类别商品价格表进行乘积。然后再将各类别商品的价格进行合计(按类别如教学家具多少钱,办公家具多少钱。空调多少钱。),填入合计数就行了。除以10000,因为汇总要求是万元。价格是元.

新建文件夹.rar (195.69 KB, 下载次数: 9)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2020-6-28 11:15 | 显示全部楼层
思路就是先从价格表中提取单价装入字典,然后遍历各学校进行计算,计算后的数据装入数组,最后赋值给总表,具体写起来比较麻烦,楼主需要可以加我Q55444524
回复

使用道具 举报

 楼主| 发表于 2020-6-29 08:47 | 显示全部楼层
回复

使用道具 举报

发表于 2020-6-29 10:26 | 显示全部楼层
你文件数据不规范,一个看起来很简单的统计出现了很多意外:1、价格表的名称与子文件不一致,比如:

     价格表:教具价格、办具价格、公具价格...

     子文件:教学家具、办公家具、公寓家具...
     这种差异导致代码很难识别,需要把价格表的名称改成与子文件完全一致,记住:是完全一致,一个字也不能差,包括不能有前后空格等;

2、价格的栏目也不一致,教育家具的价格在f列,最后一个在d列,其他的在e列。这种价格表你把格式做一样会简单很多,为了找这个错误我调试很久,花费的时间远比写代码要多得多;
     这是做表的基本要求,同样的东西不能一个表一个样;

3、不要用合并单元格,合并单元格与统计代码的兼容性很差,所以附件的序号这一栏是没填的,你要自己补;
     表格线我也没画,我个人非常不喜欢表格线,而且你说有几百个学校,这么多的单位放一起也不适合打印,表格线也没价值;

下面文件是建立在你把价格表的名称改成与子文件一致的基础上的,如果不改,能运行,但统计数都会是 0。

2021汇总表.rar

30.61 KB, 下载次数: 20

评分

参与人数 1学分 +3 收起 理由
ggwfnh + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-7-1 11:29 | 显示全部楼层
本帖最后由 ggwfnh 于 2020-7-1 16:28 编辑
hfwufanhf2006 发表于 2020-6-29 10:26
你文件数据不规范,一个看起来很简单的统计出现了很多意外:1、价格表的名称与子文件不一致,比如:

    ...

非常感谢你,是我想要的结果。主要是需求表已经传到各个学校了。学校也已经把需求表传上来了,没有办法更改了。
我已经把价格表里面 改动成一样的名称了。
现在有个问题,统计到一部分学校就出错了。不知道为什么。 现在需求表有10 张左右了


回复

使用道具 举报

发表于 2020-7-1 12:05 | 显示全部楼层
ggwfnh 发表于 2020-7-1 11:29
非常感谢你,是我想要的结果。主要是需求表已经传到各个学校了。学校也已经把需求表传上来了,没有办法更 ...

五星路小学的最后一个表的第4行,可能是无意中输入了一个空格,外观上看不出来,在编辑栏移动键盘左右键,能看出来是有空格的;
把代码:
    hj = hj + wb.Worksheets(k).Cells(j, s) * arr(m, 2)
改成:
    hj = hj + val(wb.Worksheets(k).Cells(j, s)) * arr(m, 2)
增加了val转换,能把空格转换成0;

如果你不知道如何进入代码编辑窗口修改代码,在运行出错后,选择“调试”,出错的代码行会有颜色标识;

评分

参与人数 1学分 +3 收起 理由
ggwfnh + 3 学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-7-1 14:44 | 显示全部楼层
hfwufanhf2006 发表于 2020-7-1 12:05
五星路小学的最后一个表的第4行,可能是无意中输入了一个空格,外观上看不出来,在编辑栏移动键盘左右键 ...

改正了代码,可以了,没有弹出错误,谢谢。还要再咨询一个问题。
不知道为什么序号11的那个学校没有统计到。
10表只统计出来了9张表。

回复

使用道具 举报

发表于 2020-7-1 14:50 | 显示全部楼层
ggwfnh 发表于 2020-7-1 14:44
改正了代码,可以了,没有弹出错误,谢谢。还要再咨询一个问题。
不知道为什么序号11的那个学校没有统计 ...

文件名中必须要包含“小学”或者“中学”的字样,位置无所谓,但必须有,没有会被看成是其他的无关文件而被排除掉。
这样设置的原因是因为担心你文件不规范,随意乱放无关文件进来。你之前的范例文件都是这样命名的,所以我就加了这么一条;
回复

使用道具 举报

发表于 2020-7-1 15:07 | 显示全部楼层
ggwfnh 发表于 2020-7-1 14:44
改正了代码,可以了,没有弹出错误,谢谢。还要再咨询一个问题。
不知道为什么序号11的那个学校没有统计 ...

在函数中有这么一行代码:
    If (InStr(mySubfile.Name, "小学") > 0 Or InStr(mySubfile.Name, "中学") > 0) And InStr(mySubfile.Name, "$") = 0 Then


就是明确规定必须包含“小学”和“中学”(>0就是包含的意思),而且不能包含有"$",其中以“~$”开头的文件是excel自动建立的临时文件,这是系统为了防止突然断电等保护文件而建立的,它们是子文件的镜像文件,但这些也要被排除,否则会重复打开而出错。除此之外,要排除的文件还有“价格表”和“汇总表”本身,他们会被专门打开,后续就不能再重复打开了;

如果不这么设置,起码也要明确排除“汇总表”、“价格表”、包含“$”的文件这三种,处理起来也不会比上面简单,我觉得上面的设置反而简单点,因为子文件总归是要有个具体的学校名称的,哪个学校报上来的,总得取个名吧;

或者你再加入自己的规则也行,参照上面的模式写在后面,但你要对 and 和 or 的含义理解比较准确就可以;

评分

参与人数 1学分 +3 收起 理由
ggwfnh + 3

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2020-7-1 15:25 | 显示全部楼层
hfwufanhf2006 发表于 2020-7-1 15:07
在函数中有这么一行代码:
    If (InStr(mySubfile.Name, "小学") > 0 Or InStr(mySubfile.Name, "中学 ...

懂了。我已经修改了。非常感谢。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 11:56 , Processed in 0.335736 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表