作者:绿色风
分类:
时间:2022-08-17
浏览:185
楼主 嘉昆2011 |
数据来源:- http://www.exceltip.net/thread-39103-1-1.html
问题陈述: 数据透视表中,当数据源不断增加时,如何动态更新数据源(包括数据内容)?
数据来源中,二楼的童鞋,用“SQL语句+数据透视表”做出比较完美的解释,但是当数据源不断增加时,就不能满足数据源的动态更新了。 SQL语句如下:- Select 周别, "数量("&版本&")" as 行标签, "新用户" as 用户类型, 新用户 as 数量
- From DataSource
- Union All
- Select 周别, "数量("&版本&")" as 行标签, "老用户" as 用户类型, 老用户 as 数量
- From DataSource
那么该如何实现动态数据源?作图有经验的童鞋一般会先想到定义动态名称标签,DataSource:- =OFFSET(Sheet2!$B$2,,,COUNTA(Sheet2!$B:$B)-1,COUNTA(Sheet2!$2:$2)-1)
但运行后发现会报错。为什么呢?简单的可以理解为SQL不支持动态的数据源。
那么是否有其他办法可以行得通? 本帖在上述SQL语言的基础上,提供两种解决思路: 1,可以将SQL语句更新为:- Select 周别, "数量("&版本&")" as 行标签, "新用户" as 用户类型, 新用户 as 数量
- From [Sheet2$B2:E100]
- Where 周别 Is Not Null
- Union All
- Select 周别, "数量("&版本&")" as 行标签, "老用户" as 用户类型, 老用户 as 数量
- From [Sheet2$B2:E100]
- Where 周别 Is Not Null
关键是把数据源区域适量放大,利用Where子句筛选有效的数据区域。
2,假如保留原SQL语句,需要对想要的数据源做些许处理: 把数据源设置为列表形式,更新时拖动红框内的数据选择区域,然后按刷新即可。
P.S. 以往我们更新数据,都是按“Ribbon”下的刷新按钮,或在数据表中点刷新,其实借助简单的VBA同样可以达到更新数据透视表的目的。- Private Sub Worksheet_Deactivate()
- Dim pt As PivotTable
- Dim ws As Worksheet
- For Each ws In ActiveWorkbook.Worksheets
- For Each pt In ws.PivotTables
- pt.RefreshTable
- Next pt
- Next ws
- End Sub
返回到当前的数据透视表工作簿,自动就可以更新了。
布局/展示效果:
附件可以从原帖处下载,自己手动操作可以有更深刻体会。 其中一个原因:由于使用了SQL语句,工作簿所保存的路径是不一样的,所以即使在这下载,也是不能看到更新的。 |
2楼 成就滋味 |
非常感谢**! |
3楼 嘉昆2011 |
谢谢支持,主要问题问得好,有值得深究的价值。 |
4楼 mhign_lusq |
看着有点难,以为掌握了很多技巧 实际上差的很远那...至少函数这部分还不清楚... |
5楼 花蔓 |
原来还可以这样,谢谢嘉昆,学习了~ |
6楼 xmyjk |
六点多整理的帖子,辛苦了,嘉昆 |
7楼 嘉昆2011 |
谢谢月月版主支持 |
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一