excel 从透视表组中删除空白

rmbxnbpk  于 2023-02-20  发布在  其他
关注(0)|答案(4)|浏览(154)

我有一个Excel数据集要透视,行标签按月份分组(行标签是日期)。
我有VBA设置来做透视,然后将行标签分组到月份。
在它分组到月份后,我试图在下拉列表中取消选择(空白)字段。
我试着录制宏;它就像“〈11/15/15”一样做了。
我找到了代码,但收到错误消息
找不到透视项。

Dim p_i As PivotItem

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
    .PivotItems("(blank)").Visible = True
    For Each p_i In .PivotItems
        If p_i.Name = "(blank)" Then
            p_i.Visible = False
        End If
    Next
End With

问题是否在于我先按月对项目进行分组?

hsgswve4

hsgswve41#

我的解决方案可能不是最优雅的,但你必须更改您的透视表项的可见值为TRUE。然后刷新透视表(在自动工作簿计算关闭的情况下),然后你可以自由地更改可见值为FALSE:

With ActiveSheet.PivotTables("PivotTable1")
    .PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = True
    .RefreshTable
    .PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = False
End With

我还有一个替代方案(甚至更不优雅):您可以使用日期筛选器从透视表中删除空白值:

ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotFilters.Add2 Type:=xlAfter, Value1:="1901-01-01"

这也可以通过标签过滤器来完成(如果您有一个字符串/数字表):

ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
    .PivotFilters.Add2 Type:=xlCaptionIsGreaterThan, Value1:="0"

希望能有所帮助。

roejwanj

roejwanj2#

如果你还想计算“空白”的值,你可能想试试这段代码:

Dim p_i As PivotItem

With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
    .PivotItems("(blank)").Visible = True
    For Each p_i In .PivotItems
        If p_i.Name = "(blank)" Then
            p_i.NumberFormat = ";;;"
        End If
    Next
End With
1u4esq0p

1u4esq0p3#

On Error Resume Next
    Dim ip As Long
    Dim it As Long
    For ip = 1 To ActiveSheet.PivotTables.Count
        Dim pt As PivotTable
        Set pt = ActiveSheet.PivotTables(ip)
        pt.PivotCache.Refresh
        pt.ClearAllFilters
        pt.RefreshTable

        Dim pf As PivotField
        For it = 1 To pt.PivotFields.Count
            Set pf = pt.PivotFields(it)

            Dim pi As PivotItem
            For Each pi In pf.PivotItems
                If pi.Name = "(blank)" Or pi.Name = "#N/A" Then
                    pi.Visible = False
                End If
            Next pi
        Next it
    Next ip
4smxwvx5

4smxwvx54#

我想你可以得到你的答案,如果你打开宏记录器,并通过你的鼠标点击的步骤。尝试一下,看看它是否给你你想要的。

相关问题