我试图应用一些比较几列数据的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进行比较。但是,如果我应用了一些过滤器,C2会与B3(它的原始单元格)进行比较,因此比较不正确并且给出了错误的条件格式。
见下图(这是应用过滤器的格式不正确):
有人可以帮忙吗?
答案 0 :(得分:0)
更改条件逻辑以使用常量表达式而不是单元格地址。
添加一个列,用于计算TY和LY之间的差异,并使图标以差异为条件为<0
,>0
或=0
。
正如我在评论中提到的那样:
从用户体验的角度来看,为什么较高的数字应该有一个向下的红色箭头,而较低的数字应该有一个向上的绿色箭头,这并不是很明显。
考虑使用彩色圆圈图标集而不是箭头。
通过这种方式,你仍然传达了#34; good&#34;,&#34;中立&#34;并且&#34;坏&#34;,并不意味着上/下方向与所代表的数据相矛盾。