首页 > 解决方案 > 如何从大型 Excel 文件中聚合行

问题描述

我有一个包含很多行的大型 Excel 文件。我想总结这些具有相同标准的行(有 4/5 列标准和 6/7 列要总结)。

标签: vba

解决方案


如果使用 Excel for PC,请考虑直接在 Excel 工作簿上运行 SQL,因为它可以连接到 Jet/ACE 引擎(Windows .dll 文件)。然后,运行众所周知的和使用过的聚合查询。

下面假设您有一个名为OUTPUT的工作表。请务必根据strSQL实际CriteriaCol#名称以及SheetName进行调整。如果空格和特殊字符在列名中,请将列换行SELECTGROUP BY用方括号[]或反引号括起来``

' ADO OBJECTS
Dim xlConn As Object, rs As Object
Dim icols As Long

Set xlConn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

' CURRENT WORKBOOK CONNECTION
xlConn.Open "DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};" _
              & "DBQ=" & ThisWorkbook.FullName & ";"

' AGGREGATE QUERY
strSQL = "SELECT Criteria1, Criteria2, Criteria3, Criteria4, " _
      & "   Sum(Col1) As TotalCol1, Sum(Col2) As TotalCol2, Sum(Col3) As TotalCol3," _
      & "   Sum(Col4) As TotalCol4, Sum(Col5) As TotalCol5, Sum(Col6) As TotalCol6" _
      & " FROM [SheetName$]" _
      & " GROUP BY Criteria1, Criteria2, Criteria3, Criteria4"

' OUTPUT RESULTS
rs.Open strSQL, xlConn

With Worksheets("OUTPUT")
    .Cells.Clear
    ' COLUMN HEADERS
    For icols = 0 To rs.Fields.Count - 1
        .Cells(1, icols + 1).Value = rs.Fields(icols).Name
    Next icols

    ' DATA ROWS
    .Range("A2").CopyFromRecordset rs
End With    

rs.Close
xlConn.Close

推荐阅读