Note: The other languages of the website are Google-translated. Back to English

如何基于Excel中的特定单元格值筛选数据透视表?

通常,我们通过在下拉列表中选择项目来过滤数据透视表中的数据,如下面的屏幕截图所示。 实际上,您可以根据特定单元格中的值过滤数据透视表。 本文中的 VBA 方法将帮助您解决问题。

使用VBA代码根据特定单元格值过滤数据透视表


使用VBA代码根据特定单元格值过滤数据透视表

下面的VBA代码可以帮助您基于Excel中的特定单元格值过滤数据透视表。 请执行以下操作。

1.请输入一个值,您将根据该值预先将数据透视表过滤到一个单元格中(这里我选择单元格H6)。

2.打开包含要根据单元格值过滤的数据透视表的工作表。 然后右键单击工作表选项卡,然后从上下文菜单中选择“查看代码”。 看截图:

3.在开幕 Microsoft Visual Basic应用程序 窗口,将下面的VBA代码复制到“代码”窗口中。

VBA代码:根据单元格值过滤数据透视表

Private Sub Worksheet_Change(ByVal Target As Range)
'Update by Extendoffice 20180702
    Dim xPTable As PivotTable
    Dim xPFile As PivotField
    Dim xStr As String
    On Error Resume Next
    If Intersect(Target, Range("H6:H7")) Is Nothing Then Exit Sub
    Application.ScreenUpdating = False
    Set xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
    Set xPFile = xPTable.PivotFields("Category")
    xStr = Target.Text
    xPFile.ClearAllFilters
    xPFile.CurrentPage = xStr
    Application.ScreenUpdating = True
End Sub

说明:在代码中,

1)“Sheet1”是工作表的名称。
2)“数据透视表2”是数据透视表的名称。
3)数据透视表中的过滤字段称为“类别".
4)您要过滤数据透视表的值放在单元格中 H6.
您可以根据需要更改上述变量值。

4。 按 其他 + Q 关闭键 Microsoft Visual Basic应用程序 窗口。

然后,数据透视表将根据单元格H6中的值进行过滤,如下图所示:

您可以根据需要将单元格值更改为其他值。

备注:您在单元格H6中键入的值应与数据透视表的“类别”下拉列表中的值完全匹配。


相关文章:


最佳办公效率工具

Kutools for Excel解决了您的大多数问题,并使您的生产率提高了80%

  • 重用: 快速插入 复杂的公式,图表 以及您以前使用过的任何东西; 加密单元 带密码 创建邮件列表 并发送电子邮件...
  • 超级公式栏 (轻松编辑多行文本和公式); 阅读版式 (轻松读取和编辑大量单元格); 粘贴到过滤范围...
  • 合并单元格/行/列 不会丢失数据; 拆分单元格内容; 合并重复的行/列...防止细胞重复; 比较范围...
  • 选择重复或唯一 行; 选择空白行 (所有单元格都是空的); 超级查找和模糊查找 在许多工作簿中; 随机选择...
  • 确切的副本 多个单元格,无需更改公式参考; 自动创建参考 到多张纸; 插入项目符号,复选框等...
  • 提取文字,添加文本,按位置删除, 删除空间; 创建和打印分页小计; 在单元格内容和注释之间转换...
  • 超级滤镜 (将过滤方案保存并应用于其他工作表); 高级排序 按月/周/日,频率及更多; 特殊过滤器 用粗体,斜体...
  • 结合工作簿和工作表; 根据关键列合并表; 将数据分割成多个工作表; 批量转换xls,xlsx和PDF...
  • 超过300种强大功能。 支持Office / Excel 2007-2019和365。支持所有语言。 在您的企业或组织中轻松部署。 完整功能30天免费试用。 60天退款保证。
kte选项卡201905

Office选项卡为Office带来了选项卡式界面,使您的工作更加轻松

  • 在Word,Excel,PowerPoint中启用选项卡式编辑和阅读,发布者,Access,Visio和Project。
  • 在同一窗口的新选项卡中而不是在新窗口中打开并创建多个文档。
  • 每天将您的工作效率提高50%,并减少数百次鼠标单击!
officetab底部
按评论排序
注释 (19)
还没有评分。 成为第一位评论!
该评论由网站上的主持人最小化
使用此代码(当然为我的变量更新),在更改字段时,过滤器会立即更改为正确的,然后几乎立即清除。 试图弄清楚它为什么这样做(想知道它是否与子末尾的 ClearAllFilters 有关?)
该评论由网站上的主持人最小化
您将如何使用具有层次结构的报表过滤器来执行此操作?
该评论由网站上的主持人最小化
嘿! 谢谢你的宏。

我试图将它用于同一页面中的多个数据透视表,但它不起作用。 我是这样写的:

私人子Worksheet_Change(按目标的ByVal目标)
将 xPTable1 调暗为数据透视表
将 xPFile1 调暗为 PivotField
将 xStr1 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("D7")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable1 = Worksheets("BUSCADOR").PivotTables("PV_ETAPA1")
设置 xPFile1 = xPTable1.PivotFields("ETAPA1")
xStr1 = 目标文本
xPFile1.ClearAllFilters
xPFile1.CurrentPage = xStr1
Application.ScreenUpdating =真

将 xPTable2 调暗为数据透视表
将 xPFile2 调暗为 PivotField
将 xStr2 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("G7")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable2 = Worksheets("BUSCADOR").PivotTables("PV_ETAPA2")
设置 xPFile2 = xPTable2.PivotFields("ETAPA2")
xStr2 = 目标文本
xPFile2.ClearAllFilters
xPFile2.CurrentPage = xStr2
Application.ScreenUpdating =真

END SUB

也许你能帮帮我!

提前感谢!
该评论由网站上的主持人最小化
Hi


感谢宏


我正在尝试同样的事情,但无法让它在 2 张桌子上工作。 他们都在看同一个单元格,只有 2 个不同的数据透视表


谢谢
该评论由网站上的主持人最小化
您必须更改数据透视表名称。 每个数据透视表都有不同的名称。 为此,右键单击数据透视表并选择数据透视表设置,名称将位于顶部
该评论由网站上的主持人最小化
你好,不知为何,这个宏进入visual basic页面后,根本没有出现。 我无法启用/运行此宏,我检查了所有信任中心设置,但没有任何反应,请帮助我
该评论由网站上的主持人最小化
嗨,我似乎无法让它工作。 我要引用的单元格是从公式中提取出来的 - 这就是为什么过滤器在查看公式而不是公式返回的值时找不到它的原因吗?提前谢谢希瑟麦克唐纳
该评论由网站上的主持人最小化
嗨,Heather,你找到解决方案了吗? 我也有同样的问题。
该评论由网站上的主持人最小化
我能够修改/过滤位于同一选项卡上的 3 个不同的枢轴。 我还在我的数据集“未找到数据”中添加了一行,否则它将过滤器留给我不想要的“全部”。 以上对我赢得管理层的赞誉有很大帮助,所以我想分享。 请注意 (All) 是区分大小写的,这让我有点想明白。
私人子Worksheet_Change(按目标的ByVal目标)
'测试
将 xPTable 调暗为数据透视表
将 xPFile 调暗为 PivotField
将 xStr 调暗为字符串

将 x2PTable 调暗为数据透视表
将 x2PFile 调暗为 PivotField
将 x2Str 调暗为字符串

将 x3PTable 调暗为数据透视表
将 x3PFile 调暗为 PivotField
将 x3Str 调暗为字符串

出错时继续下一步
如果 Intersect(Target, Range("a2:e2")) 没有,则退出 Sub

Application.ScreenUpdating = False

'tbl-1
设置 xPTable = Worksheets("Graphical").PivotTables("PivotTable1")
Set xPFile = xPTable.PivotFields("MR 部门 - 部门")
xStr = 目标文本
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
If xPFile.CurrentPage = "(All)" Then xPFile.CurrentPage = "No Data Found"

'tbl-2
设置 x2PTable = Worksheets("Graphical").PivotTables("PivotTable2")
Set x2PFile = x2PTable.PivotFields("MR 部门 - 部门")
x2Str = 目标文本
x2PFile.ClearAllFilters
x2PFile.CurrentPage = x2Str
If x2PFile.CurrentPage = "(All)" Then x2PFile.CurrentPage = "No Data Found"

'tbl-3
设置 x3PTable = Worksheets("Graphical").PivotTables("PivotTable3")
Set x3PFile = x3PTable.PivotFields("MR 部门 - 部门")
x3Str = 目标文本
x3PFile.ClearAllFilters
x3PFile.CurrentPage = x3Str
If x3PFile.CurrentPage = "(All)" Then x3PFile.CurrentPage = "No Data Found"

Application.ScreenUpdating =真

END SUB
该评论由网站上的主持人最小化
谷歌表格可以做到这一点吗? 如果是这样,怎么做?
该评论由网站上的主持人最小化
Google 表格不需要任何数据透视表。 可以直接通过Filter Function来执行
该评论由网站上的主持人最小化
我想在同一个工作表中使用多个工作表更改代码。 怎么做? 我的代码如下:
私人子Worksheet_Change(按目标的ByVal目标)
'基于单元格值的数据透视表过滤器
将 xPTable 调暗为数据透视表
将 xPFile 调暗为 PivotField
将 xStr 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("D20:D21")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
设置 xPFile = xPTable.PivotFields("Designation")
xStr = 目标文本
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating =真
END SUB

Private Sub Worksheet_Change2(ByVal Target As Range)
'基于单元格值2的数据透视表过滤器
将 xPTable 调暗为数据透视表
将 xPFile 调暗为 PivotField
将 xStr 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("H20:H21")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable = Worksheets("Sheet1").PivotTables("PivotTable2")
设置 xPFile = xPTable.PivotFields("Offering")
xStr = 目标文本
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr
Application.ScreenUpdating =真
END SUB
该评论由网站上的主持人最小化
Olá, gostaria de saber se quisesse filtrar mais de uma categoria como poderia ser?
该评论由网站上的主持人最小化
如果我想将选择单元格链接到不同的选项卡怎么办? 到目前为止,这是我的代码
私人子Worksheet_Change(按目标的ByVal目标)
将 xPTable1 调暗为数据透视表
将 xPFile1 调暗为 PivotField
将 xStr1 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("B1")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable1 = Worksheets("SM_SKU PIVOTS").PivotTables("PivotTable1")
设置 xPFile1 = xPTable1.PivotFields("Geography")
xStr1 = 目标文本
xPFile1.ClearAllFilters
xPFile1.CurrentPage = xStr1
Application.ScreenUpdating =真

将 xPTable2 调暗为数据透视表
将 xPFile2 调暗为 PivotField
将 xStr2 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("B1")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable2 = Worksheets("SM_SKU PIVOTS").PivotTables("PivotTable4")
设置 xPFile2 = xPTable2.PivotFields("Geography")
xStr2 = 目标文本
xPFile2.ClearAllFilters
xPFile2.CurrentPage = xStr2
Application.ScreenUpdating =真

将 xPTable3 调暗为数据透视表
将 xPFile3 调暗为 PivotField
将 xStr3 调暗为字符串
出错时继续下一步
如果 Intersect(Target, Range("B1")) 什么都不是,则退出 Sub
Application.ScreenUpdating = False
设置 xPTable3 = Worksheets("SM_SKU PIVOTS").PivotTables("PivotTable8")
设置 xPFile3 = xPTable3.PivotFields("Geography")
xStr3 = 目标文本
xPFile3.ClearAllFilters
xPFile3.CurrentPage = xStr3
Application.ScreenUpdating =真

END SUB
该评论由网站上的主持人最小化
您好!

我是 VBA 新手,我想要一个代码来根据单元格范围选择一个数据透视过滤器。
如何将“CurrentPage”更改为范围值?
谢谢!!
-------------------------------------------------- -----------------------------------------
子 PrintTour()

ActiveSheet.PivotTables("PivotTable1").PivotFields(_
“[Bereich 1].[Tour].[Tour]”)。 _
清除所有过滤器
ActiveSheet.PivotTables("PivotTable1").PivotFields(_
“[Bereich 1].[Tour].[Tour]”)。 _
CurrentPage = "[Bereich 1].[Tour lt. Anlieferungstag].&[4001-01]"
END SUB
该评论由网站上的主持人最小化
非常感谢您提供此代码! 在调整以满足我的领域后,我让它工作了,但是在我的工作表上格式化了一些更改之后,它现在不起作用了! 我将它从 A1 移到 B1,更改了一些单元格格式以使其脱颖而出,等等。没什么太疯狂的,但现在当我更改 B1 中的文本时它不会更新。 有人有想法么?

私人子Worksheet_Change(按目标的ByVal目标)
'测试
将 xPTable 调暗为数据透视表
将 xPFile 调暗为 PivotField
将 xStr 调暗为字符串

将 x2PTable 调暗为数据透视表
将 x2PFile 调暗为 PivotField
将 x2Str 调暗为字符串

将 x3PTable 调暗为数据透视表
将 x3PFile 调暗为 PivotField
将 x3Str 调暗为字符串

出错时继续下一步
如果 Intersect(Target, Range("b1")) 什么都不是,则退出 Sub

Application.ScreenUpdating = False

'tbl-1
设置 xPTable = Worksheets("Line Report").PivotTables("PivotTable7")
设置 xPFile = xPTable.PivotFields("Utopia Source")
xStr = 目标文本
xPFile.ClearAllFilters
xPFile.CurrentPage = xStr

'tbl-2
设置 x2PTable = Worksheets("Line Report").PivotTables("PivotTable2")
设置 x2PFile = x2PTable.PivotFields("Utopia Source")
x2Str = 目标文本
x2PFile.ClearAllFilters
x2PFile.CurrentPage = x2Str

'tbl-3
设置 x3PTable = Worksheets("Line Report").PivotTables("PivotTable3")
设置 x3PFile = x3PTable.PivotFields("Utopia Source")
x3Str = 目标文本
x3PFile.ClearAllFilters
x3PFile.CurrentPage = x3Str

Application.ScreenUpdating =真

END SUB
该评论由网站上的主持人最小化
嗨兰斯,
我测试了你的代码,它在我的情况下运行良好。 更改单元格格式不会影响代码的运行。
该评论由网站上的主持人最小化
使用多个表时,它如何与 Power Pivot 一起使用? 我录制了宏更改过滤器中的值。 进行了一些更改以使上述代码正常工作。 但它会引发类型不匹配错误。 不管我做什么。
该评论由网站上的主持人最小化
嗨,DK,
该方法不适用于 Power Pivot。 带来不便敬请谅解。
这里还没有评论
留下你的意见
以访客身份发帖
×
评价此帖子:
0   产品特性
建议地点