在一个目录下,有n张excel工作簿数量未知,文件名未知。但是要统计的数据都位于工作簿的第二张表,且工作簿和表的结构是完全一致的。
单个表示例汇总表:
如何将该目录下的所有工作簿的第二章表的指定数据汇总到 总表中了

解决方案 »

  1.   

        Dim wkst As Worksheet, wkbk As Workbook, sumA As Currency, sumB As Currency
        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
      

  2.   

    你是想用VBA实现吗?
    其实也不算很难啊。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.”中说的是“读取”,其实过来操作:对其“赋值”,就是写入数据了。