具有可变条件的VBA条件格式

时间:2017-06-11 20:15:04

标签: excel vba formatting conditional cells

我正在尝试在第三列(“C”)的18个单元格中设置条件格式。我合并了第一列中的每个6个单元(“A”)和第二列中的未合并(正常)单元(“B”)。如果在“A”列的第一行中有“是”或者“A”列中是否存在“否”并且“在”中“通过”,我试图检查列“C”行中的每个下一个单元格B“专栏。诀窍是,我想只检查“A”列的第一行,第七,第十三和第十九(所以步骤= 6)并检查“B”列中的每一行。我尝试这样的事情:

Sub try()
    Dim i As Integer
    Dim j As Integer
    i = 1

    For j = 1 To 12
        With Range("C1:C18")
            .FormatConditions.Delete
            .FormatConditions.Add Type:=xlExpression, Formula1:="=OR(Cells(i, 1) = ""Yes""; AND(Cells(i, 1) = ""No""; Cells(j, 2) = ""Pass""))"

        End With
        If j Mod 6 = 0 Then 
            i = i + 6

    Next j
End Sub

但是它没有那样工作,我看到了像“A1”或“A3”这样的特定单元格的例子,但是我希望每个循环都有一个数字增加(所以我尝试使用Cells(行,列))。 / p>

1 个答案:

答案 0 :(得分:0)

您可以使用相对地址在整个范围内的一个语句中执行此操作,因此适用于C1相对于A1B1的内容将自动跟随在后续行中范围。

唯一的技巧是检索列A中的值,因为此值仅在单元格A1A7等中可用。这是通过表达式{{1 }}

OFFSET(A1,-MOD(ROW(C1)-1,6),0)

您也可以使用相同的公式从GUI执行此操作;选择单元格C1然后选择整个范围Sub doIt() With Sheet1.Range("C1:C30").FormatConditions .Delete .Add(xlExpression, , _ "=OR(OFFSET(A1,-MOD(ROW(C1)-1,6),0)=""yes"",AND(OFFSET(A1,-MOD(ROW(A1)-1,6),0)=""no"",B1=""pass""))") _ .Interior.ColorIndex = 6 End With End Sub ,然后单击

C1:C30并输入相同的公式。

顺便说一下,如果你不关心检查Conditional Fomatting -> New rule -> Use a formula...,表达式可以进一步简化,这意味着如果确保A列是"是"或"不"。