根据下拉列表更改数据透视表过滤器

时间:2013-07-25 20:32:10

标签: excel vba excel-vba pivot-table

我有下拉列表,其中包含国家/地区列表。我需要根据下拉列表中选择的国家/地区过滤数据透视表。我正在使用此代码。

Sub PivotChange(ByVal Target As Range)

 If Not Application.Intersect(Target, Sheets("Summary").Range("D7")) Is Nothing Then
 Sheets("Data_4PivotChart").PivotTables("PivotTable7").PivotFields("Country"). _
    ClearAllFilters
Sheets("Data_4PivotChart").PivotTables("PivotTable7").PivotFields("Country").CurrentPage _
    = Sheets("Summary").Range("D7").Value
 End If

End Sub

但目前它没有做任何事情。任何人都可以帮助我在哪里添加此代码,以便它将由事件触发。

由于

4 个答案:

答案 0 :(得分:2)

虽然对你来说可能为时已晚,但这可能有助于其他人。 CurrentPage属性有效only for Page fields。使用以下代码:

Sub PivotChange(ByVal Target As Range)

 If Not Application.Intersect(Target, Sheets("Summary").Range("D7")) Is Nothing Then
 Sheets("Data_4PivotChart").PivotTables("PivotTable7").PivotFields("Country"). _
    ClearAllFilters
Sheets("Data_4PivotChart").PivotTables("PivotTable7").PivotFields("Country").PivotFilters.Add _
     Type:=xlCaptionEquals, Value1:=Sheets("Summary").Range("D7").Value
 End If

End Sub

答案 1 :(得分:0)

您熟悉数据透视表的“报表过滤器”功能吗?这是一个下拉列表,可以过滤您的数据透视表。您不需要自定义下拉列表。你可以在这里阅读:

http://office.microsoft.com/en-us/excel-help/use-a-report-filter-in-a-pivottable-or-pivotchart-report-HP010167854.aspx#BMdisplay_a_different_set_of_values_in_

也在这里:

http://www.contextures.com/Excel-Pivot-Table-Report-Filters.html

修改

要控制多个数据透视表,您可以使用切片器:

http://blog.contextures.com/archives/2011/03/07/filter-multiple-pivot-tables-with-excel-2010-slicers/

再次编辑:

仅当您的数据透视表共享相同的数据源时才会这样做。

Using single slicer to control two pivot tables with different data source in Excel

第四次编辑:

您需要在该单元格上设置工作表更改事件,并在其中添加下拉列表。该事件将运行您的数据透视表过滤器宏。

http://support.microsoft.com/kb/213612

答案 2 :(得分:0)

我遇到了同样的问题,没有VBA宏,我可以更容易地解决问题。我有每个公司每个区域每个部门按每个区域销售的移动设备的源列表以及移动设备上的各种其他字段信息,我必须使用多个数据透视表(如Rubik的立方体)进行报告。源列表有不同的销售日期,但客户只想要上周的销售,这意味着我必须从每个数据透视表的过滤器下拉框中手动选择要报告的周,这是痛苦和耗时的。在我选择刷新之前。

以下是解决方案:在源列表中创建一个列并输入您希望使用的任何条件 - 在我的情况下,我使用MAX函数和TRUE / FALSE评估标准来查看记录是否属于最近一周。因此,此列中将包含TRUE / FALSE标志列表。然后在您的数据透视表过滤器中选择TRUE,您的数据透视表将自动过滤到真实条件。

答案 3 :(得分:0)

使用动态下拉菜单将达到目的。以下是一些简单的示例步骤,可为您提供一个想法,您可以将其应用于您的案例:

  1. 我创建了4张桌子:蔬菜,水果,饮料,地方
  2. 每张桌子下面都有一个列表(例如:蔬菜:胡萝卜,洋葱,土豆,番茄;水果:苹果,香蕉,葡萄,橙子,无花果;饮料:可乐,芬达,雪碧,7Up,无酒精啤酒;位置:公园,家庭,工作,校园,大学)
  3. 为每个表格创建名称范围:蔬菜,水果,饮料,地方
  4. 在“单元格F2”中,进入“数据验证-列表-来源”下拉列表:引用每个类别的标题单元格(= A2:D2)
  5. 在单元格G2中,通过转到“数据验证”-“列表”-“来源”,下拉列表:[在这里您需要使用INDIRECT()函数]:键入“ = INDIRECT(F2)。
  6. 要对其进行测试,请在选择项(单元格F2)中从下拉列表中选择一个值。根据您选择的值,下一个子选择下拉列表将根据您在单元格F2中选择的主要选择提供一个列表。

Dynamic Drop down

希望有帮助, 谢谢, 阿利舍尔·尼扎莫夫