ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > 综合应用 > 利用数据透视表做即可输入又可下拉的级联菜单

利用数据透视表做即可输入又可下拉的级联菜单

作者:绿色风 分类: 时间:2022-08-18 浏览:314
楼主
gouweicao78
目前,级联菜单一般使用公式筛选不重复值的方式,当数据量较大时,将可能因为运算速度慢而失去实用性。
数据透视表在处理大数据量方面具有非常不错的优势,但需要刷新透视表,因而本例结合简单的VBA代码实现实时刷新透视表,以便提供下拉菜单。

如图1:A列是商品名称,B列是单位(可能有某个商品存在多个单位和单价,比如萝卜干有按件、包等计算)

 

步骤1  选择A:C列数据区域,单击“插入”选项卡中的“表格”按钮,创建“表1”
步骤2  单击“通过数据透视表汇总”按钮,创建“数据透视表1”,如下图左侧(注意,原数据表中可能有多个字段,透视表只需做出需级联菜单的字段)

 
步骤3 定义名称:
品名1  =OFFSET(透视表!$A$3,,,COUNTA(透视表!$A:$A))

步骤4 创建数据透视表2,数据源为=品名1   如图中右侧——对透视表1的再透视
步骤5 定义名称:
品名2  =OFFSET(透视表!$E$4,,,COUNTA(透视表!$E:$E)-1)

步骤6 选择Sheet1的B2单元格,定义名称:
单位  =OFFSET(透视表!$B$1,MATCH(Sheet1!$A2,透视表!$A:$A,0)-1,,COUNTIF(透视表!$A:$A,Sheet1!$A2))

步骤7  设置Sheet1的A列数据有效性→序列→=品名2
B列数据有效性→序列→=单位
C列数据有效性→序列→=OFFSET(单位,0,1)

注意:以上3个数据有效性“出错警告”选项卡均取消“输入无效数据时显示出错警告”,以便实现——即可输入又可下拉的有效性功能。

步骤8 在Sheet1的VBE窗口中插入以下代码,实现实时刷新数据透视表1、2
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Sheets("透视表").PivotTables("数据透视表1").PivotCache.Refresh
  3. Sheets("透视表").PivotTables("数据透视表2").PivotCache.Refresh
  4. End Sub
注意:透视表应在报表布局中选择“以表格形式显示”和“重复所有项目标签”(2003版无此功能)

 

最终实现的功能中,下拉菜单“单位”、“单价”可能会存在重复现象,比如萝卜干的单位有“包、件、件”,这些都可以利用类似方法去除重复,不过如果不会导致下拉选项太多,则可以不必太在意重复问题,因为相比原数据表,这些局部的重复现象已经非常少了。
透视表下拉菜单.rar
2楼
zf5345
呵呵~~~没有想到,提出的问题上榜了!V
3楼
水星钓鱼
好文

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap