Excel的条件格式使用数据透视表扩展?

一旦将条件格式应用于数据透视表,如果展开表格,条件格式如何自动更新以将其自身应用于新的扩展数据透视表?

附件是示例excel文件。

以下是从我的post,在http://yoursumbuddy.com/re-apply-excel-pivot-table-conditional-formatting/逐字。 您可能还对http://yoursumbuddy.com/unified-method-of-pivot-table-formatting/感兴趣:

此代码的关键是每个FormatCondtionModifyAppliesToRange方法。 此代码标识行标签范围的第一个单元格,并通过该单元格中的每个格式条件进行循环,并将其重新应用到由行标签范围与值范围的交集形成的范围,即第一个带区上面的图像。

此方法依赖于要重新应用的所有条件格式设置在第一行标签单元格中。 在条件格式可能不适用于最左边的行标签的情况下,我仍然将其应用于该列,但修改了条件以检查它所在的列。

该function可以通过SheetPivotTableUpdate事件进行修改和调用,所以当用户或代码更新数据透视表时,它会自动重新应用。

 Sub Extend_Pivot_CF_To_Data_Area() Dim pvtTable As Excel.PivotTable Dim rngTarget As Excel.Range Dim rngSource As Excel.Range Dim i As Long 'check for inapplicable situations If ActiveSheet Is Nothing Then MsgBox ("No active worksheet.") Exit Sub End If On Error Resume Next Set pvtTable = ActiveSheet.PivotTables(ActiveCell.PivotTable.Name) If Err.Number = 1004 Then MsgBox "The cursor needs to be in a pivot table" Exit Sub End If On Error GoTo 0 With pvtTable 'format conditions will be applied to row headers and values areas Set rngTarget = Intersect(.DataBodyRange.EntireRow, .TableRange1) 'set the format condition's source to the first cell in the row area Set rngSource = rngTarget.Cells(1) With rngSource.FormatConditions For i = 1 To .Count 'reset each format condition's range to row header and values areas .Item(i).ModifyAppliesToRange rngTarget Next i End With 'display isn't always refreshed otherwise Application.ScreenUpdating = True End With End Sub 

众所周知,数据透视表对格式化没有反应,并且有一个不保留手动应用格式的历史,甚至没有提到扩展条件格式。 如果您需要,可以考虑使用VBA在刷新后重新应用格式,或将条件格式应用于整行或整列。

我使用的2010年,所以我不能说这将在其他版本的工作,也据我testing这只适用于,如果你想条件格式应用到透视图中的所有单元格(不只是一个特定的行数据,你可能能够排除总计,但我没有尝试过)。

然而,在做任何编码之前,如果要将格式应用于表格中的所有行,可能值得一试。

创build一个新的工作表>在这个新的工作表中input条件格式到一个单元格中>在这个单元格上使用复制格式化画笔>返回到数据透视表工作表,并将格式化的第一个左上angular的值拖动到最后一个左下angular值。

刷新你的图表,展开折叠你的图表,你的格式应该保持,不仅如此,而且即使当你从数据透视中删除所有的字段并将它们添加回来,仍然保持原样。 它似乎是通过这样做的格式应用到自己的图表,而不是内部的单个单元格。

我意外地发现了这一点,但是因为我经常在这里寻找答案,所以让人们知道我发现的东西似乎是正确的,即使这是一种侥幸。