这个功能有点强悍!合并工作表:按指定字段合并文件夹下所有Excel文件、CSV文件,包含所有子文件夹

文摘   教育   2024-10-06 21:51   江苏  

点【关于本公众号】了解一下,欢迎关注谢谢!

快速浏览

实用案例

|日期控件||简单的收发存||收费管理系(Access改进版)|

|电子发票管理助手||电子发票登记系统(Access版)|

|文件合并||表格拆分||审计凭证抽查底稿|

|中医诊所收费系统(Excel版)||中医诊所收费系统(Access版)||银行对账单自动勾对|

|印章使用登记系统|

收费使用项目

|财务管理系统||工资薪金和年终奖个税筹划||新税法下工资表模版|

内容提要

  • 合并文件夹下所有Excel文件、CSV文件,包含所有子文件夹
  • 递归处理所有子文件夹
大家好,我是冷水泡茶,昨天在论坛上看到一个求助贴:[求助] 请老师帮忙合并这两个提取数据的VBA,每天做重复的工作太烦人了
具体需求:

我收集了本论坛的两位老师数据汇总的VBA,本人小白一个请老师们帮将这两个文件的VBA结合成一个,主要是合并我每天工作日报的需求:

第1个(1选择文件夹数据合并)优点可以选择文件夹,不用将VBA文件复制到要汇总的文件内。直接可以选择文件夹提取数据。

第2个(2文件夹内数据汇总)优点是可以选择提取数据的项目(背景黄色处是填写要汇总的数据列数标题),非常方便提取指定的数据

我已将需求和符件上传,感谢。

https://club.excelhome.net/forum.php?mod=viewthread&tid=1703073&page=1&_dsign=c649e35c

关于文件合并、工作表合并,我们分享过很多了,不过,都不能直接解决今天这个案例:

1、Excel工作表合并,新花样, 这可咋搞?单张明细表中包含多个标题,位置不固定、字段顺序不统一

2、重磅升级:Excel文件合并,包括子文件夹,文件名关键字过滤,工作表名关键字过滤
3、合并工作簿:按指定条件批量合并工作簿内容
4、Excel表合并:不管字段顺序,不管字段多少,不管表头在第几行,统统可以合并
5、文件合并神器/文件合并功能大扩展/EXCEL合并、WORD合并、PDF合并、图片合并为PDF
6、合并文件夹下所有EXCEL明细表
7、不规则工作表汇总:表头字段顺序不同如何汇总?明细表添加记录自动更新到汇总表
需求分析:

1、他这个需求说了一大堆,概括起来就是今天的文章标题:“按指定字段合并文件夹下所有CSV文件”,他所需要的是能自主选择文件夹,自动合并文件夹下所有CSV文件。

2、我们再拓展一下,文件类型包括所有Excel文件、CSV文件,并且可以包括所有子文件夹。

基本思路:

1、我们上面列出的第2条案例【重磅升级:Excel文件合并,包括子文件夹,文件名关键字过滤,工作表名关键字过滤】跟今天的案例非常接近了,如果将就着用一下也能实现,我们可以先把所有Excel工作表(CSV文件)先合并起来,然后删除不需要的字段。

2、前述案例的难点在于,添加字段,碰到工作表中字段比已经处理的工作字段要多,我们就要把它添加到结果表中;而今天这个案例,难点在于,选择字段,只提取我们需要的数据。这也是两个案例的主要区别。

3、如果说一定要比较难易程度的话,我觉得今天这个要稍简单一点。

4、我们就借助前期案例,进行修改,来完成今天的案例。

5、其他过程我们就不多说了,感兴趣的朋友可以参考前述案例,我们就简单说一下合并的逻辑:

(1)我们定义一个结果数组arrTem,标题在第一列,跟我们的工作表是一个转置的关系,可以横向扩展。

(2)当我们循环到一个工作表,把这个工作表装入数组arr,包括表头字段。

(3)我们根据arr的行数,扩展结果数组arrTem的列数。这里我们记下扩展前的最大列数preLine,重定义arrTemp的列数currLine=preLine+ubound(arr)-1,一次性扩展到位,不用一列一列地扩展。

(4)我们循环arrTem的标题,记下标题的值colName,然后到arr标题里找这个colName(利用pxy函数定位,把位置赋值给currCol )如果有,我们就循环arr的行,把currCol所在列的数据写入arrTemp。描述得比较费劲,可能也不好理解,我们看代码,这段代码可以算是本案例的灵魂:

If itemCount > 0 Then    arr = .Range(.Cells(titleRow, 1), .Cells(lastRow, lastCol))    preLine = UBound(arrTem, 2)    currLine = preLine + UBound(arr) - 1    ReDim Preserve arrTem(1 To UBound(arrTem), 1 To currLine)        '//填上工作簿名、工作表名    For i = 2 To UBound(arr)        arrTem(1, preLine + i - 1) = wb.Name        arrTem(2, preLine + i - 1) = ws.Name    Next        '//合并数据    For j = 1 To UBound(arrTem)        colName = arrTem(j, 1)        currCol = Pxy(arr, colName, 2)        If currCol > 0 Then            For i = 2 To UBound(arr)                arrTem(j, preLine + i - 1) = arr(i, currCol)            Next        End If    NextEnd If

示例代码详见当天另一条推文。

后记

1、汇总表中的第3行,汇总字段,是汇总取数的关键,一定要设置正确

2、原表中第一行“标题所在行”,目前是没有用到,我们在用户窗体中有一个设置,非首行标题。

3、原需求中的汇总文件类型是CSV,我们添加了Excel文件类型,直接在代码里判断文件扩展名,也可以在用户窗体中加上CheckBox,勾选合并的文件类型。

好,今天就到这里,我们下期再会!


~~~~~~End~~~~~~

安利小店
安利的牙膏非常不错,用了以后就不想再用其他的了;洗洁精洗衣液也是日常必备,用过都说好!

合谷医疗
合谷医疗专攻各种疑难杂症,尤其擅长抑郁症焦虑失眠儿童神经发育异常多动症自闭孤独症腰颈椎疾病治疗,可谓神乎其技!体验过的直呼早点来就好了

喜欢就点个、点在看留言评论、分享一下呗!感谢支持!

案例文件分享说明

  • 案例文件可免费分享,但需符合以下要求:

  • 关注点赞点在看点...留言,方便的话分享一下就完美啦!如果不便走上面的“流程”,请打赏,万分感谢!

  • 请添加上方我的合谷医疗企业微信,案例文件通过微信发送。如有定制需求,亦可通过微信联系。

  • Excel问题,请在文章下面留言讨论!或者加入我的付费交流群提问

VBA编程实战
Excel应用案例、Excel VBA、公式函数使用技巧分享,思路解读...... 这里有鲜活案例、实用的技巧......
 最新文章