使用VBA条件格式化数据透视表

时间:2016-12-21 18:22:15

标签: excel vba excel-vba

我试图应用一些比较几列数据的VBA代码。

请参见下图(此条件格式正确): enter image description here

在这种情况下,列c中的值将与列B,E到D,G到F,I到H进行比较。得分越高越好,因此条件格式在所有2016列中,如果值大于2015年,应该有一个红色向下箭头,如果相反,则应该是绿色箭头。

以下是我一直在使用的代码:

Sub ColorYear()
    Dim long1 As Long
    Dim t As Long
    Dim c As Long
    Application.ScreenUpdating = False
    ' Last used row
    long1 = Cells(Rows.Count, 1).End(xlUp).Row
    ' Delete existing rules
    Range("A7:U" & long1).FormatConditions.Delete
    ' Loop through the rows
    For t = 3 To long1
        For c = 5 To 21 Step 2 ' columns C,E,G,I
            With Cells(t, c).FormatConditions.AddIconSetCondition
                .IconSet = ActiveWorkbook.IconSets(xl3Triangles)
                .ReverseOrder = True
                With .IconCriteria(2)
                    .Type = xlConditionValueFormula
                    .Value = "=" & Cells(t, c - 1).Address
                    .Operator = 7
                End With
                With .IconCriteria(3)
                    .Type = xlConditionValueFormula
                    .Value = "=" & Cells(t, c - 1).Address
                    .Operator = 5
                End With
            End With
        Next c
    Next t
    Application.ScreenUpdating = True
End Sub

只要没有应用过滤,这就有效。例如,如果没有应用过滤器,则将单元C3与B3进行比较。但是,如果我应用了一些过滤器,C2会与B3(它的原始单元格)进行比较,因此比较不正确并且给出了错误的条件格式。

见下图(这是应用过滤器的格式不正确):

enter image description here

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

更改条件逻辑以使用常量表达式而不是单元格地址。

添加一个列,用于计算TY和LY之间的差异,并使图标以差异为条件为<0>0=0

正如我在评论中提到的那样:

  

从用户体验的角度来看,为什么较高的数字应该有一个向下的红色箭头,而较低的数字应该有一个向上的绿色箭头,这并不是很明显。

考虑使用彩色圆圈图标集而不是箭头。

colored circles

通过这种方式,你仍然传达了#34; good&#34;,&#34;中立&#34;并且&#34;坏&#34;,并不意味着上/下方向与所代表的数据相矛盾。