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