在一个目录下,有n张excel工作簿数量未知,文件名未知。但是要统计的数据都位于工作簿的第二张表,且工作簿和表的结构是完全一致的。
单个表示例汇总表:
如何将该目录下的所有工作簿的第二章表的指定数据汇总到 总表中了
单个表示例汇总表:
如何将该目录下的所有工作簿的第二章表的指定数据汇总到 总表中了
解决方案 »
- spread 8.0 如何用代码设置combo列可编辑
- 一个我不知道该起什么题目的问题!
- 谁知道这个工程是什么意思:
- SQLserver2000服务器 改变默认端口后如何连接?
- 一个非常简单的生成xml文件的例子,为什么不行?
- 请教:所需要的数据已经从数据库取出,显示在界面上的控件中,请问如何按照规定的报表格式做打印预览和打印啊?
- 今天心情不好,共享原代码
- 如何击活某窗体中的控件?
- 我在VB.NET下不能使用数学函数
- vb 程序运行提示ADO needs to be installed to use Databinding
- vbs获取Ie浏览器alert弹框的提示信息
- C#调用vba实现excel中数据生成数据透视表或者其他方法实现批量excel数据透视表生成
Set fso = CreateObject("Scripting.filesystemobject")
For Each file In fso.getfolder("D:").Files '到指定目录里找文件(不包含子目录)
If LCase(Right(file.shortname, 3)) = "xls" Or _
Mid(LCase(StrReverse(file.shortname)), 2, 3) = "slx" Then
wkbk = Application.Workbooks.Open(file.Path) '如果文件名是 .xls或者.xls? 结尾
wkst = wkbk.Sheets(2) '就打开工作簿,在第二个sheet的c列
wkst.Cells(1, 3).Formula = "=sumif(A:A,""a"",B:B)" '通过公式SUMIF对"a"和"b"
wkst.Cells(2, 3).Formula = "=sumif(A:A,""b"",B:B)" '条件求和(假定数据在AB两列)
sumA = sumA + wkst.Cells(1, 3) '将公式结果累加到汇总数据中
sumB = sumB + wkst.Cells(2, 3)
wkbk.Close
End If
Next
Debug.Print sumA, sumB
其实也不算很难啊。1. 文件夹:
简单粗暴的方法,用 Inputbox( ) 函数,让“用户”输入要处理的目录就行了。
如果要想做得高级点、人性化一点,那就可以用 API实现文件夹选择对话框;
也可以用 Shell对象选择对话框;更直接的,可以用 Application.FileDialog来实现选择。
在VBA环境中,推荐用 Application.FileDialog 实现。2. 文件:
有前一步选择的“目录”后,用Dir$( ) 函数枚举指定目录中的所有 xlsx文件(或xls文件)。
简单点的就是枚举一个处理一个。当然先全部枚举,存到字符串数组中,然后依次处理也行。
打开工作簿,用 Workbooks.Open( )函数接口就行。3. 所谓“第二张表”:
如果确定“表对象名”是 Sheet2,那么在“操作工作表”时可以写死为 .Sheet2 。
不确定的话,那么必须做到“工作表名”(指的是打开文档后在“表标签”上看到的文字)是统一的。
比如叫“Sheet2”,或者“xx数据记录”等等,要看你的具体情况了。
这种情况下,可以用 相应工作簿对象的 .Sheets(2)、 .Sheets("Sheet2")、或者 .Sheets("xx数据记录") ,
选择任意一种方式来“确定工作表对象”就行了。4. 读取单元格数据
有很多种方式,比如用 objSheet.Range("C6").Value 就可以读取指定工作表中C6单元格的值;
也可以用 objSheet.Cells(6, 3).Value 来读取指定工作表中C6单元格的值。
在Range( )、Cells( )中的参数是可以用变量值的,因此可以很方便的用“循环”来处理所有的单元格了。5. 出“统计结果”
在上面“4.”中读出来的数据,先“统计”到数组中存储下来。
在统计完所有的文件后,再“写入”一个指定的(或“新建”)工作表中就行了。
在上面“4.”中说的是“读取”,其实过来操作:对其“赋值”,就是写入数据了。