2013-08-07 151 views
1

我有一個數據透視表,基於PowerPivot在行中有多個級別。相當多的元素都是空白的。有沒有辦法抑制空白行?刪除空白Excel數據透視表條目

我的數據透視表目前看起來像這樣。

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最終會篩選出每個具有任何空白值的級別。

不知道我是否有意義或提供足夠的信息進行故障排除。我現在幾乎腦子已經死了,所以我很抱歉。

請讓我知道,如果它沒有意義,或者如果我可以提供任何額外的信息來澄清我想要做什麼和遇到什麼。

謝謝。

編輯:改變了代碼塊更清晰,並添加了「後」代碼塊,以顯示我想要的。我想問題是整個數據透視表的行的「深度」必須相等。例如,如果我對第一個項目有3個縮進,其他人也必須顯示3個縮進值的數據。如果我隱藏空白並導致第一個項目的縮進值爲1,則它會隱藏其他項目的非空白,如果它們出現在1縮進後面。仍然不確定這是否有道理:)我需要一些睡眠。

回答

1

我改用扁平數據透視表代替PowerPivot「管理」屏幕。這似乎是我所需要的。

+1

需要注意的是,如果選擇整個工作表來插入數據透視表,而不是僅僅需要數據透視表中的數據,則可能會出現這些空白。 – Adjit

+0

@Adjit,謝謝,這顯然也適用於使用epplus以編程方式生成數據透視表。 –

1

我認爲你應該可以在數據透視表選項下的顯示中檢查Show items with no data on rows和/或Show items with no data on columns

+0

試過,但沒有運氣,可悲。感謝您的回覆。我可以嘗試的任何其他想法? – Predator

+0

不用擔心:)感謝pnuts。 – Predator

+0

是的,我做到了,但沒有運氣。只要我設置了過濾器,它也會刷新。 – Predator

0

嘗試選擇數據透視表「空白」中的單元格按刪除按鈕並按空格鍵。

0

不知道爲什麼或如何工作,但我收集了包含(空白),然後熱空格鍵的數據透視表中的一個單元格。然後我點擊返回鍵,同一列中的所有(空白)單元都變爲空白。對錶格中的其他列重複此操作。

1

我需要解決完全相同的問題,但希望在更改pivottable過濾或刷新數據時自動隱藏行,所以我寫了一個函數,該函數從表單持有的「Worksheet_PivotTableUpdate」事件中調用如果你願意的話,你可以把它從一個按鈕上取下來。這最初是通過掃描透視表中的每一行來完成的,隱藏它,如果它是可見的並且不需要(如行的第一個單元格是'(空白)'),或者顯示它是否隱藏並且不應該不會的,否則就把它隱藏起來或者看起來就是這樣。

但是,我發現該函數運行非常緩慢,因此這裏是我的下一個嘗試,它最初取消隱藏了數據透視表中的所有行,然後找到第一列中的所有空白單元格,將它們添加到範圍對象,那麼它會隱藏該範圍內每個單元格的整個行。這個版本的工作速度大約快了十倍:-)

傳入pivottable駐留的工作表的名稱,pivottable的名稱以及在需要隱藏的行中查找的可選字符串;如果不是由調用函數提供的,則默認爲'(空白)'。

道歉提前如果我倒下任何人的變量或函數的命名約定的犯規(我只是一個黑客;-))

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類型的函數之一,但找不到適合該賬單的任何內容,所以如果你知道如何做這樣的事情,請讓我知道,因爲它會加快速度。

我希望這可以幫助那裏的人!