|
本帖最后由 fankairong 于 2012-7-21 22:47 编辑
数据透视表绝对是Excel数据分析的最强大工具(没有之一);但同时限于Excel本身的局限,日常工作中更多的数据源都是存在类似Access\SQL Server等数据库中.在这种情况下,我们应该如何发挥数据透视表的优势呢?或许你会说可以用外部数据源\MQ等,但他们都存在不少的明显缺点,比如条件判断,变量使用等等,那如果直接用VBA来创建数据透视表呢?那不就可以完美解决以上问题了吗?
接下来就分别以最常用的三种数据源来举例说明.
ADO透视表.rar
(595.99 KB, 下载次数: 903)
1\Excel数据源
关键点:表名需要以$结尾,如[订单$],日期标识符为#
Private Sub 以Excel为数据源创建透视表()
Dim mySQL As String
Dim mycnn
Dim wsh As Worksheet
Set wsh = Worksheets("Excel为数据源透视表")
Set mycnn = CreateObject("ADODB.connection")
Dim pt As PivotCache
'删除旧的数据透视表,以免接下来新建时出错
On Error Resume Next
wsh.PivotTables("数据透视表1").TableRange2.Delete
'建立链接
Set mycnn = CreateObject("adodb.connection")
mycnn.Open ("provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName)
mySQL = "SELECT `订单$`.订单ID, `订单$`.客户, `订单$`.雇员, `订单$`.订购日期, `订单$`.到货日期, `订单$`.发货日期, `订单$`.运货商, `订单$`.运货费, `订单$`.货主名称,"
mySQL = mySQL & " `订单$`.货主地址, `订单$`.货主城市, `订单$`.货主地区, `订单$`.货主邮政编码, `订单$`.货主国家, `订单明细$`.产品, `订单明细$`.单价, `订单明细$`.数量, `订单明细$`.折扣"
mySQL = mySQL & " FROM `订单$` `订单$`, `订单明细$` `订单明细$` WHERE `订单$`.订单ID = `订单明细$`.订单ID and 发货日期>=#1997-1-1# " '建立透视表缓存
Set pt = ActiveWorkbook.PivotCaches.Create(xlExternal)
Set pt.Recordset = mycnn.Execute(mySQL)
pt.CreatePivotTable TableDestination:=wsh.Range("a3"), TableName:="数据透视表1"
'透视表布局
With wsh.PivotTables("数据透视表1")
.PivotFields("产品").Orientation = xlRowField
.PivotFields("产品").Position = 1
.AddDataField wsh.PivotTables("数据透视表1").PivotFields("数量"), "数量合计", xlSum
End With
'清空对象
mycnn.Close
Set mycnn = Nothing
End Sub
|
评分
-
4
查看全部评分
-
|