一、概述
最近刚好有需求,就研究了下VBA编程,使用excel的宏命令编写了一个数据汇总小工具,汇总指定目录下的所有excel文件seet1的数据至一个新的excel表中,设计思想如下: 1、将要汇总的excel文件放置在一个“数据文件夹”中; 2、遍历该“数据文件夹”中的所有excel表sheet1的数据; 3、复制数据到一个新建工作簿中; 4、保存工作簿并更名为“已完成”; 5、最终就会看到新生成了一个“已完成.xlsx”。
二、代码
新建一个“模板”,再新建一个“过程”,编写VBA程序,代码如下:
'汇总指定文件夹下的所以excel表sheet1数据至新工作簿中
Sub Merge()
Dim curdir, fs, f, fc, f1, fname, wb, sht
'获取当前文件目录
curdir = ThisWorkbook.Path
'获取要处理的数据表目录
sdir = curdir & "\数据文件夹"
'Debug.Print curdir
'赋予文件系统访问对象
Set fs = CreateObject("Scripting.FileSystemObject")
'获取对文件夹所有属性的访问
Set f = fs.GetFolder(sdir)
'获取文件夹中所有 File 对象的集合
Set fc = f.Files
Dim rows, cols, tbook, tsh, row1
'新建一个工作簿用于存放汇总数据
Set tbook = Workbooks.Add()
'新工作簿的sheet1
Set tsh = tbook.Worksheets(1)
'对新工作簿操作的行计数器
row1 = 0
'遍历要处理文件夹中的所有文件
For Each f1 In fc
fname = f1.Name
'打印正在处理的文件名
Debug.Print "正在处理文件:" + fname
'打开文件
Set wb = Workbooks.Open(f1)
Set sht = wb.Worksheets(1)
'获取处理文件的行数
rows = sht.UsedRange.rows.Count
'获取处理文件的列数
cols = sht.UsedRange.Columns.Count
'对处理文件按行遍历
For rw = 1 To rows
'行计数器加1
row1 = row1 + 1
'对处理文件按列遍历
For col = 1 To cols
'将数据复制到新工作簿单元格
tsh.Cells(row1, col) = Cells(rw, col).Value
Next
Next
wb.Close '关闭已处理完成文件
Next
tbook.SaveAs (curdir & "\已完成") '保存新工作簿并更名
tbook.Close '关闭新工作簿
End Sub
三、运行结果
1、要处理的文件目录 2、处理完成后,新增了一个“已完成.xlsx”。 3、“已完成.xlsx”文件内容 ![在这里插入图片描述](https://img-blog.csdnimg.cn/388fbfa584f640ffbf12246a0a0e4d00.png#pic_center)
|