用VBA实现条件格式

用VBA实现条件格式,vba,excel,Vba,Excel,我需要一些帮助是写一些VBA代码。 如果a列中的位置号匹配,我想对表应用条件格式 以下是我的表格示例: +-----------------+------+-------+ | Location Number | Year | Value | +-----------------+------+-------+ | 1 | 2015 | 1.1 | | 1 | 2016 | 2.3 | | 2 | 201

我需要一些帮助是写一些VBA代码。 如果a列中的位置号匹配,我想对表应用条件格式

以下是我的表格示例:

+-----------------+------+-------+
| Location Number | Year | Value |
+-----------------+------+-------+
|               1 | 2015 | 1.1   |
|               1 | 2016 | 2.3   |
|               2 | 2015 | 2.8   |
|               2 | 2016 | 3.2   |
|               3 | 2015 | 7.8   |
|               3 | 2016 | 3.7   |
+-----------------+------+-------+
我要做的是将条件格式应用于此表,以便如果位置号匹配,则比较2015年和2016年的值

条件格式相当简单:

如果2016年大于2015年,则将该值变为红色


如果2016年小于2015年,则将单元格变为绿色。

以下宏如何:

Sub ColorYear()

Dim long1 As Long
Dim rng As Range

Set rng = ActiveSheet.Range("A:A")
long1 = Application.WorksheetFunction.CountA(rng)

For t = 2 To long1
If ActiveSheet.Range("A" & t).Value = ActiveSheet.Range("A" & t - 1).Value Then
    If ActiveSheet.Range("C" & t).Value < ActiveSheet.Range("C" & t - 1).Value Then
    ActiveSheet.Range("C" & t).Interior.Color = RGB(0, 255, 0)
    ElseIf ActiveSheet.Range("C" & t).Value > ActiveSheet.Range("C" & t - 1).Value Then
    ActiveSheet.Range("C" & t).Interior.Color = RGB(255, 0, 0)
    End If

    If ActiveSheet.Range("D" & t).Value < ActiveSheet.Range("D" & t - 1).Value Then
    ActiveSheet.Range("D" & t).Interior.Color = RGB(0, 255, 0)
    ElseIf ActiveSheet.Range("D" & t).Value > ActiveSheet.Range("D" & t - 1).Value Then
    ActiveSheet.Range("D" & t).Interior.Color = RGB(255, 0, 0)
    End If
End If

Next t

End Sub
Sub ColorYear()
暗淡的长
变暗rng As范围
Set rng=ActiveSheet.Range(“A:A”)
long1=Application.WorksheetFunction.CountA(rng)
对于t=2到1
如果ActiveSheet.Range(“A”&t).Value=ActiveSheet.Range(“A”&t-1).Value),那么
如果ActiveSheet.Range(“C”&t).ValueActiveSheet.Range(“C”&t-1).Value然后
ActiveSheet.Range(“C”&t).Interior.Color=RGB(255,0,0)
如果结束
如果ActiveSheet.Range(“D”&t).ValueActiveSheet.Range(“D”&t-1).Value然后
ActiveSheet.Range(“D”&t).Interior.Color=RGB(255,0,0)
如果结束
如果结束
下一个t
端接头
结果:

如果要使用箭头,可以使用以下代码:

Sub Arrow()

Dim long1 As Long
Dim rng As Range

Set rng = ActiveSheet.Range("A:A")
long1 = Application.WorksheetFunction.CountA(rng)

For t = 2 To long1
If ActiveSheet.Range("A" & t).Value = ActiveSheet.Range("A" & t - 1).Value Then

If ActiveSheet.Range("C" & t).Value < ActiveSheet.Range("C" & t - 1).Value Then
ActiveSheet.Range("D" & t).Value = ChrW(9660)
ActiveSheet.Range("D" & t).Font.Color = RGB(42, 154, 68)
ElseIf ActiveSheet.Range("C" & t).Value > ActiveSheet.Range("C" & t - 1).Value Then
ActiveSheet.Range("D" & t).Value = ChrW(9650)
ActiveSheet.Range("D" & t).Font.Color = RGB(229, 35, 35)
End If

End If

Next t

End Sub
子箭头()
暗淡的长
变暗rng As范围
Set rng=ActiveSheet.Range(“A:A”)
long1=Application.WorksheetFunction.CountA(rng)
对于t=2到1
如果ActiveSheet.Range(“A”&t).Value=ActiveSheet.Range(“A”&t-1).Value),那么
如果ActiveSheet.Range(“C”&t).ValueActiveSheet.Range(“C”&t-1).Value然后
ActiveSheet.Range(“D”和t).Value=ChrW(9650)
ActiveSheet.Range(“D”&t).Font.Color=RGB(229,35,35)
如果结束
如果结束
下一个t
端接头

请注意,此代码将覆盖D列中的值,因此请确保不在D列中存储任何值

b列中的年份是否正确?b列中的年份是否正确?您需要更新您的问题并改进对条件的描述,例如(
如果2016年小于2015年,请将单元格变为绿色。
)。也张贴任何VBA你试图代码。似乎工作!下一个问题,实际上有多个“值”列。这些都在C、D、E和F列中。如何修改此代码以在每一列中运行?因此,它不是在C列中运行,而是在C列、D列、E列和F列中运行?您只需复制if部分(if结束if)并将其粘贴到下面,但在循环中,并将所有C重命名为D等。非常感谢,Pete!出于好奇,有没有办法实现向上/向下箭头图标,而不是将单元格染成红色/绿色?我尝试用标准的条件格式方式进行此操作,但收到一个错误,表示图标不能应用于相对引用…是的,您可以使用ChrW(9650)和ChrW(9660),但您需要一个列来输入值。如果有帮助,请不要忘了给我的答案打分:)