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

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

看下面的图片(这种条件格式正确的方式): 在这里输入图像说明

在这种情况下,列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进行比较。 但是,如果我应用了一些filter,C2与B3(它是原始单元格)进行比较,所以比较不正确,给了我错误的条件格式。

请参阅下图(这是使用filter的格式不正确):

在这里输入图像说明

任何人都可以协助

将您的条件逻辑更改为使用常量expression式而不是单元格地址。

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

也正如我在评论中提到的:

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

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

彩色的圆圈

这样,你仍然可以传达“好”,“中性”和“坏”,而不会暗示上下方向与所表示的数据相矛盾。