条件格式化数据透视表vba

时间:2016-01-03 20:34:21

标签: excel vba pivot-table

我想在数据透视表中进行一些条件格式化,并确保在更改数据透视表字段时,我的格式设置与需要格式化的内容保持一致。

这是开始:

到目前为止,我的数据集中有两列:account#和sales。我遇到的问题是我的oPvtItm是空的。因此,“for each”循环无效。

Sub condformat1()

Dim ws As Worksheet 
Dim oPvt As PivotTable 
Dim oPvtItm As PivotItem

Set ws = ActiveSheet 
Set oPvt = ws.PivotTables("pv1")


For Each oPvtItm In oPvt.PivotFields("sum of sales").PivotItems

    If oPvtItm > 100000 Then
    oPvtItm.DataRange.Interior.Color = vbYellow
    End If 
Next

End Sub

一旦解决了这个问题,我想对我的帐户进行分类(例如,a,b,c组)。可能是行或列。 (让它成为一个简单的列)。因此,我愿意只分析帐户组“a”的销售情况。

2 个答案:

答案 0 :(得分:1)

找到了我要找的东西:

    Sub condformat2()

Dim ws As Worksheet
Dim oPvt As PivotTable
Dim oPvtItm As PivotItem
Dim abc As String


Set ws = ActiveSheet
Set oPvt = ws.PivotTables("pv1")
Set oPvtDataField = oPvt.ColumnFields(1)
abc = "a"

For Each oPvtItm In oPvtDataField.PivotItems
    If oPvtItm = abc Then
        For Each cell In oPvtDataField.PivotItems(abc).DataRange
            If cell.Value > 100000 Then
            cell.Interior.Color = vbYellow
            End If
        Next
    End If
Next

End Sub

感谢Doug以及这些来源的作者:

http://www.databison.com/how-to-read-data-from-pivot-table-using-vba/

http://peltiertech.com/referencing-pivot-table-ranges-in-vba/

答案 1 :(得分:0)

正如我的评论中提到的,我会考虑使用实际的条件格式而不是VBA。但是,这里有一些代码可以满足您的要求:

Sub condformat1()

Dim ws As Worksheet
Dim oPvt As PivotTable
Dim oPvtDataField As PivotField
Dim cell As Range

Set ws = ActiveSheet
Set oPvt = ws.PivotTables("pv1")
Set oPvtDataField = oPvt.DataFields("sum of sales")

For Each cell In oPvtDataField.DataRange
    If cell.Value > 100000 Then
    cell.Interior.Color = vbYellow
    End If
Next
End Sub