You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel VBA中SQL统计不同Packets对应的Diagrams与FinDate数量问题

Excel VBA中使用SQL统计分组有效条数问题

需求:按[Packets]列分组,统计每个分组下[Diagrams]和[FinDate]的有效条数(空值不统计),数据表中[Packets]存在重复值。当前单列统计正常,添加第二个统计条件后运行报错。

原始数据表

DiagramsPacketsFinDate
152652504/12/23
183752504/25/23
4-b-8552503/18/23
a-46850305/06/23
385758004/03/23
b-d3d580
void58003/29/23
c-85450305/01/23
0525

期望输出结果

PacketsDiagramsFinDate
50322
52543
58032

当前报错代码

Sub CountOfDiagrams_FinDate()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset

strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
  & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";;"

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

cn.Open strCon

strSQL = "SELECT [Packets], " & _
         "COUNT([Diagrams]) AS AMOUNT, COUNT([FinDate]) AS AMOUNT " & _
         "FROM [MECHANICAL$] " & _
         "GROUP BY [Packets]"

rs.Open strSQL, cn

Sheets("Sheet1").Select

' row
Dim r As Integer
r = 2
' column
Dim c As Integer
c = 1

Cells(r, c).CopyFromRecordset rs

rs.Close
cn.Close

End Sub

问题原因及解决方法

  1. 列别名重复:SQL语句中两个统计列的别名均为AMOUNT,导致字段名冲突,这是报错的直接原因。需将别名改为与统计列对应的名称,比如AS Diagrams和AS FinDate。
  2. COUNT函数适配需求:COUNT([列名])会自动忽略该列的空值,刚好符合统计有效条数的要求,无需调整。

修正后的代码

Sub CountOfDiagrams_FinDate()

Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim ws As Worksheet

strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
  & ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
Set ws = ThisWorkbook.Sheets("Sheet1") ' 直接指定工作表,避免激活操作

cn.Open strCon

' 修正SQL别名,确保字段名唯一
strSQL = "SELECT [Packets], " & _
         "COUNT([Diagrams]) AS Diagrams, COUNT([FinDate]) AS FinDate " & _
         "FROM [MECHANICAL$] " & _
         "GROUP BY [Packets]"

rs.Open strSQL, cn

' 直接在目标工作表写入数据
ws.Cells(2, 1).CopyFromRecordset rs

rs.Close
cn.Close

' 释放对象资源
Set rs = Nothing
Set cn = Nothing
Set ws = Nothing

End Sub

内容的提问来源于stack exchange,提问作者ryanm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:03:20