我有一个包含大量行的大型excel文件。我想对这些具有相同标准的行进行求和(有4/5列标准和6/7列的事情要总结)。
答案 0 :(得分:0)
您可以同时执行这两项操作,但使用SumIfs函数或数据透视表进行求和可能更容易。但是,如果你在VBA上设置,这里有一些代码:
Sub SumNumber()
'Column F is data to sum
'Column B is year
'Column C is month
MsgBox Application.WorksheetFunction.SumIfs(Columns("F"), Columns("B"), "2018", Columns("C"), "April")
End Sub
如果要对多个列求和,只需复制具有不同初始范围(不是F列)的sumif。
示例:Sumifs(列(“F)... + SumIfs(列(”E“)...
(注意这实际上是在单元格中制作公式)
Here is a file包含此宏的一些示例数据。它还有一个数据透视表,可能是一个更好的选择。
在回答您的其他问题时,您可以从另一张表中进行链接。您只需要使用文件路径引用,但是当目录重命名,安全配置文件更改等时,这往往会中断。
答案 1 :(得分:0)
如果使用Excel for PC,则考虑直接在Excel工作簿上运行SQL,因为它可以连接到Jet / ACE引擎(Windows .dll文件)。然后,运行众所周知且使用过的聚合查询。
下面假设您有一个名为 OUTPUT 的工作表。请务必针对实际条件和 Col#名称以及 SheetName 调整strSQL
。如果空格和特殊字符位于列名称中,请将SELECT
和GROUP 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