正在删除空白Excel数据透视表条目



我有一个基于PowerPivot的透视表,在"行"部分有多个级别。相当多的元素是空白的。有没有办法抑制空白行?

我的数据透视表现在是这样的。

Product1
    Release 1
        Iteration 1
            (blank)
        Iteration 2
            (blank)
    Release 2
        (blank)
            (blank)
Product2
    (blank)
Product3
    Release 1
        Iteration 1
            Sprint 1
            (blank)
        (blank)
(blank)

这就是我想要的

Product1
    Release 1
        Iteration 1
        Iteration 2
    Release 2
Product2
Product3
    Release 1
        Iteration 1
            Sprint 1

这只是一个例子。我试着为每个级别设置过滤器,不显示空白,但如果我过滤每个级别以隐藏空白字段,数据透视表中就没有任何项目。看起来Excel最终会过滤掉每个具有任何空白值的级别。

不确定我是否有意义或提供了足够的信息进行故障排除。我现在脑子都快死了,所以我道歉。

如果这没有意义,或者我是否可以提供任何额外的信息来澄清我试图做什么和遇到什么,请告诉我。

谢谢。

编辑:将代码块更改为更清晰,并添加了一个"after"代码块来显示我想要得到的内容。我想问题是整个数据透视表的行的"深度"必须相等。例如,如果第一个项目有3个缩进,那么其他项目也必须显示3个缩进级别的数据。如果我隐藏空白,并且这导致第一个项目的数据缩进1次,那么如果其他项目出现在缩进1次之后,它也会隐藏非空白。仍然不确定这是否有意义:)我需要睡一会儿。

我认为您应该能够在"数据透视表选项"下的"显示"中检查Show items with no data on rows和/或Show items with no data on columns

我最终使用了PowerPivot"管理"屏幕中的扁平数据透视表。这似乎满足了我的需要。

我需要解决完全相同的问题,但希望在数据透视表筛选更改或数据刷新时自动隐藏行,所以我在保存数据透视表的工作表上编写了一个从"Worksheet_PivotTableUpdate"事件调用的函数,尽管如果你愿意,我想你可以通过按钮将其关闭。这项工作最初是通过扫描数据透视表中的每一行来完成的,如果它可见且不需要,则将其隐藏(因为该行的第一个单元格是"(空白)"),或者如果它被隐藏且不应该被隐藏,则将它显示出来,否则只保留隐藏或可见状态。

然而,我发现函数运行得很慢,所以我的下一次尝试是,首先取消隐藏数据透视表中的所有行,然后找到第一列中的所有空白单元格,将它们添加到范围对象中,然后为该范围中的每个单元格隐藏整行。这个版本的工作速度大约是的十倍:-)

传入数据透视表所在的工作表的名称、数据透视表的名称以及要在需要隐藏的行中查找的可选字符串;如果不是由调用函数提供的,则默认为"(空白)"。

如果我违反了任何人的变量或函数命名约定,请提前道歉(我只是一名黑客;-)

Sub FixBlankPivotRowsV2(ByVal SheetName As String, ByVal PivotName As String, Optional HideDefn as String = "(blank)")
Dim CurrPivot As PivotTable
Dim CurrRow As Range
Dim BlankRange As Range        'NB This is where we'll build the range of things to hide, which will initially be Nothing, as we never initialise it.
Dim oldStatusBar As Boolean
'Show a nice message in the status bar
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Hiding blank entries in " & SheetName & ", back in a sec..."
Application.ScreenUpdating = False
'Get the pivottable to work with        
Set CurrPivot = ActiveWorkbook.Sheets(SheetName).PivotTables(PivotName)
'Unhide all of the pivot rows first
CurrPivot.RowRange.Rows.EntireRow.Hidden = False
'Loop around each row in the pivottable
For Each CurrRow In CurrPivot.RowRange.Rows
    If CurrRow.Offset(0, 0).value = HideDefn Then
        If BlankRange Is Nothing Then
            'This is the first blank row we've found, so just set the range up to be the first cell of that range
            Set BlankRange = CurrRow.Offset(0, 0)
        Else
            'Add the newly found blank row to the range using a Union
            Set BlankRange = Union(BlankRange, CurrRow.Offset(0, 0))
        End If
    End If
Next
'Only hide things if there's anything to hide!
If BlankRange Is Nothing Then
    Debug.Print "Nothing to hide!"
Else
    BlankRange.EntireRow.Hidden = True
End If
'Set the status bar back the way it was
Application.ScreenUpdating = True
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
End Sub

我寻找了一种方法,使用Go to Special类型函数之一选择第一列中的所有"空白"单元格,但找不到符合要求的内容,所以如果你知道如何做这样的事情,请告诉我,因为它会加快速度。

我希望这能帮助到外面的人!

尝试在数据透视表中选择一个单元格"空白",按下删除按钮并按空格键。

不知道为什么或如何工作,但我选择了数据透视表中包含(空白)的一个单元格,然后选择了空格键。然后我按下回车键,同一列中的所有(空白)单元格都变为空白。对表中的其他列重复此操作。

最新更新