ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > 数据透视表 > 数据透视表的动态数据源

数据透视表的动态数据源

作者:绿色风 分类: 时间:2022-08-17 浏览:134
楼主
嘉昆2011
数据来源:
  1. http://www.exceltip.net/thread-39103-1-1.html
问题陈述:
数据透视表中,当数据源不断增加时,如何动态更新数据源(包括数据内容)?

数据来源中,二楼的童鞋,用“SQL语句+数据透视表”做出比较完美的解释,但是当数据源不断增加时,就不能满足数据源的动态更新了。
SQL语句如下:
  1. Select 周别, "数量("&版本&")" as 行标签, "新用户" as 用户类型, 新用户 as 数量
  2. From DataSource
  3. Union All
  4. Select 周别, "数量("&版本&")" as 行标签, "老用户" as 用户类型, 老用户 as 数量
  5. From DataSource
那么该如何实现动态数据源?作图有经验的童鞋一般会先想到定义动态名称标签,DataSource:
  1. =OFFSET(Sheet2!$B$2,,,COUNTA(Sheet2!$B:$B)-1,COUNTA(Sheet2!$2:$2)-1)
但运行后发现会报错。为什么呢?简单的可以理解为SQL不支持动态的数据源。

那么是否有其他办法可以行得通?
本帖在上述SQL语言的基础上,提供两种解决思路:
1,可以将SQL语句更新为:
  1. Select 周别, "数量("&版本&")" as 行标签, "新用户" as 用户类型, 新用户 as 数量
  2. From [Sheet2$B2:E100]
  3. Where 周别 Is Not Null
  4. Union All
  5. Select 周别, "数量("&版本&")" as 行标签, "老用户" as 用户类型, 老用户 as 数量
  6. From [Sheet2$B2:E100]
  7. Where 周别 Is Not Null
关键是把数据源区域适量放大,利用Where子句筛选有效的数据区域。

2,假如保留原SQL语句,需要对想要的数据源做些许处理:
把数据源设置为列表形式,更新时拖动红框内的数据选择区域,然后按刷新即可。

 

P.S.
以往我们更新数据,都是按“Ribbon”下的刷新按钮,或在数据表中点刷新,其实借助简单的VBA同样可以达到更新数据透视表的目的。
  1. Private Sub Worksheet_Deactivate()
  2.     Dim pt As PivotTable
  3.     Dim ws As Worksheet
  4.     For Each ws In ActiveWorkbook.Worksheets
  5.         For Each pt In ws.PivotTables
  6.             pt.RefreshTable
  7.         Next pt
  8.     Next ws
  9. 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总版主之一

评论列表
sitemap