VBA进阶-在VBA中使用SQL语句生成统计报表

替代COUNTIFS&SUMIFS函数

示例代码

Sub Select_Group1()
    Dim cnn As New ADODB.Connection   '创建Connection对象,该对象代表了Excel与后面指定数据库的连接
    Dim rst As ADODB.Recordset	'创建Recordset对象,该对象用来保存执行SQL语句后生成的数据集
    Dim SQL As String
    Dim i As Integer
    Dim mypath As String
    On Error GoTo ErrMsg	'
    mypath = ThisWorkbook.FullName
    cnn.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & mypath	'使用Connection对象的Open方法来连接指定数据库与数据表的位置
    SQL = "SELECT RS,逾期天数 ,SUM(逾期金额) As 金额,COUNT(*) As 名下账户 FROM [sheet1$] GROUP BY 逾期天数,RS"
    Set rst = cnn.Execute(SQL)	'执行SQL语句
    Worksheets(2).Select
    Cells.ClearContents	‘在Excel中放置数据
    For i = 0 To rst.Fields.Count - 1
        Cells(1, i + 1) = rst(i).Name
    Next
    Range("a2").CopyFromRecordset rst
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cnn = Nothing
    Exit Sub
ErrMsg:
    MsgBox Err.Description, , "Description of Error"
End Sub

数据源

在使用的数据源是excel表的第一个表,表名为【sheet1】,数据如下:
在这里插入图片描述

前提条件

要先在【工具】-【引用】中引用两个库,Microsoft ActiveX Data Object 2.8 Library 与 Microsoft ADO Ext.2.8 for DDL and Security 库。不同的操作系统ADO(active data object,动态数据对象)的版本会有所不同。

友情提示

在使用这个方法之前,要确定excel的原表中是否有空的记录,如果有的则要删除,否则有一定概率会把空的记录也统计到结果中。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值