vba - Excel VBA - 数据透视表过滤多个不确定标准

标签 vba excel

我有 2 个表,一个包含项目列表,另一个是包含这些项目详细信息的数据透视表。我需要做的是从一个表中取出一组项目编号,根据该编号过滤数据透视表,复制他提供的数据,然后从第一个表移至下一个项目编号。
我使用了 Excel VBA - Privot table filter multiple criteria 中的部分代码
谢拉多

For k = 1 To  10
conv = Cells(k, 24)
arr(k) = conv
Next
Set PVT = ActiveSheet.PivotTables("PivotTable1")

For Each PivotItem In PVT.PivotFields("Project ID").PivotItems
    If Not IsError(Application.Match(PivotItem.Caption, arr, 0)) Then ' check if current item is not in the filter array
        PivotItem.Visible = True
    Else
        PivotItem.Visible = False
    End If
Next PivotItem

我遇到的问题是当数据透视表中没有项目 ID 时。

例如,我有项目 ID 118 和 156,它们被分配给 arr,但数据透视表不包含我收到错误的那些值。

一种解决方案是在运行过滤器之前运行比较脚本来检查数据透视表是否具有该值,但使用 vlook up 或其他 FOR 命令需要太长时间。如果找不到值,是否有任何更简单的解决方案可以跳过过滤器?还是触发不同的命令?

最佳答案

在我们开始之前:

使数据透视表更新更快的一种方法是设置 PVT.ManualUpdate = True在开始弄乱 PivotItems 之前,请将其设置为 PVT.ManualUpdate = False并运行 PVT.Update在它们都设置好之后。

这将阻止 Excel 在每次更改项目时尝试重建数据透视表,而是在最后进行 1 次大更新。

那么,进入实际问题!

您是否尝试过仅添加校验和?从 Long 开始设置为0,然后每次设置PivotItem.Visible = True时加1 .如果为 0,则没有要显示的项目。如果不是 0,那么你知道有多少匹配。作为粗略的指南,您正在寻找这样的东西:

For k = 1 To 10
    conv = Cells(k, 24)
    arr(k) = conv
Next
Set PVT = ActiveSheet.PivotTables("PivotTable1")
Dim lCounter As Long
lCounter = 0

PVT.ManualUpdate = True

For Each PivotItem In PVT.PivotFields("Project ID").PivotItems
    If Not IsError(Application.Match(PivotItem.Caption, arr, 0)) Then ' check if current item is not in the filter array
        PivotItem.Visible = True
        lCounter = lCounter + 1
    Else
        PivotItem.Visible = False
    End If
Next PivotItem

If lCounter < 1 Then
    PVT.PivotFields("Project ID").ClearAllFilters 'Show EVERYTHING
    MsgBox "None of the specified Projects were found.", vbCritical, ":("
End If

PVT.Update
PVT.ManualUpdate = False

关于vba - Excel VBA - 数据透视表过滤多个不确定标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52177545/

相关文章:

Excel VBA 开发最佳实践

vba - 如何检查 Excel 用户表单文本框中的空值?

excel - CheckBox 触发了另一个复选框 excel 宏

vba - Excel VBA 打开工作簿、执行操作、另存为、关闭

regex - 从匹配的正则表达式中提取 Excel 字符串 (VBA)

excel - 自动筛选以查找空白单元格

excel - ScreenUpdating是否有必要写成True

VBA 在特定细胞范围内提供清晰的值,并保护细胞免遭配方冲走

vba - 向多个收件人发送电子邮件 vba

excel - 为日期范围创建 CUBESET