vba - 如何从大型 Excel 文件中聚合行
问题描述
我有一个包含很多行的大型 Excel 文件。我想总结这些具有相同标准的行(有 4/5 列标准和 6/7 列要总结)。
- 是否可以创建一个 VBA 来创建该求和过程?
- 是否可以在另一个链接到主表的 excel 表中执行此操作,而无需打开原始的 excel 文件(因为打开需要很长时间)。
解决方案
如果使用 Excel for PC,请考虑直接在 Excel 工作簿上运行 SQL,因为它可以连接到 Jet/ACE 引擎(Windows .dll 文件)。然后,运行众所周知的和使用过的聚合查询。
下面假设您有一个名为OUTPUT的工作表。请务必根据strSQL
实际Criteria和Col#名称以及SheetName进行调整。如果空格和特殊字符在列名中,请将列换行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
推荐阅读
- azure - 如何在 Azure 功能上安装 apt-get 包
- c# - Unity 输入管理器停止识别 Xbox One 触发器输入
- java - 具有多对多关系的 JPQL 查询
- r - R 正在使用多个线程而没有运行作业 (R v4.0/Win 10.018363)
- r - 如何读取位于 R 中私有共享驱动器中的私有 Google 电子表格?
- ios - UILabel:纯文本和属性文本有什么区别?
- laravel - 在 Laravel 上验证 2 深度数组
- nginx - 防止子域在 nginx 中重定向到 SSL/HTTPS
- python - 如何正确地向 Pyppeteer 中的网站发送 POST 请求
- c++ - 线程安全整数数组?