使用VBA宏进行动态条件格式化

时间:2013-09-03 17:11:36

标签: excel vba excel-vba

我对VBA很新。我想有条件地格式化ActiveCell列的单元格,如果它们不存在于ActiveCell右侧4列的列中,则它们会突出显示为蓝色。我记录了一个宏,它为一组特定的列执行此操作,但我无法更改它,以便它可以根据ActiveCell的位置为任意列集合工作。录制的代码如下所示

    Range("Y8").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
    "=COUNTIF(AC:AC, Y8)=0"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
    .PatternColorIndex = xlAutomatic
    .Color = 15773696
    .TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
ActiveWindow.SmallScroll Down:=0

有人可以告诉我如何改变这一点,以便Y8是ActiveCell和AC:AC是ActiveCell右侧的第4列。谢谢。

1 个答案:

答案 0 :(得分:0)

如果您需要VBA解决方案,请在发布的代码中使用R1C1引用作为COUNTIF位,如:

"=COUNTIF(C[4], R[]C[])=0"

这些是相对引用,Excel会自动计算并将它们转换为适合您的A1样式引用。

可替换地, 如果宏的唯一目的是让这些单元格变为彩色,那么你就不需要宏了。

在第一列中选​​择您的数据,单元格A1作为您选择中的活动单元格(我将其称为下面的A列,将4列偏移称为E列)并转到条件格式。

添加基于公式的新'条件格式'

输入公式

= ISERROR(MATCH(A1,E:E,0))

然后选择所需的格式。

请注意,由于单元格引用是相对的,因此您可以非常轻松地将格式复制并粘贴到任意列,并且仍然会检查新列右侧的4列。