【问题标题】:How do I conditionally format a column in VBA based on each cell's value and a fixed cell's value?如何根据每个单元格的值和固定单元格的值有条件地格式化 VBA 中的列?
【发布时间】:2015-06-24 19:34:33
【问题描述】:

我需要为一个列设置条件格式,其中每个单元格都根据从电子表格中的单元格派生的两个其他值突出显示。值是日期。这需要在 VBA 中完成(有很多原因:代码可以与其他软件一起使用并清除内容、将行组合在一起等)。我在很多方法上都失败了,目前在以下方面失败了:

Sheets("Trial").Activate
With ActiveSheet.Range("E:E")
.Select
.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, Formula1:="="
& (Range("P1").Value - 1), Formula2:="=" & (Range("P1").Value + 6)
.FormatConditions(1).Interior.Color = RGB(255, 0, 0)
End With

最终,当值介于 P1-1 和 P1+6 之间时,我需要 E 列中的单元格变为红色。即使我提取此代码并自行运行它,我也会收到过程调用错误。想法?

【问题讨论】:

    标签: vba date excel conditional-formatting


    【解决方案1】:

    请尝试:

    Sheets("Trial").Activate
    With Columns("E:E")
    .FormatConditions.Add Type:=xlExpression, Formula1:="=AND(E1>=$P$1-1,E1<=$P$1+6)"
    .FormatConditions(1).Interior.Color = 255
    End With
    

    【讨论】:

    • 我仍然收到错误消息。我应该补充一点,这些值是日期,并将编辑问题以反映这一点。我曾尝试使用日期变量并将它们与 &'s 一起嵌入到上面列出的公式中,但它不起作用。
    【解决方案2】:

    如果您不想使用,甚至不必使用条件格式。您可以使用 for 循环遍历 E 列中的所有值。以此为例。

    Dim TotalERows As Long
    Dim EValue As Long
    Dim LowerBound As Long
    Dim UpperBound As Long
    LowerBound = Worksheets("Sheet1").Range("P1").Value - 2
    UpperBound = Worksheets("Sheet1").Range("P1").Value + 7
    TotalERows = Worksheets("Sheet1").Range("E" & Rows.Count).End(xlUp).Row
    For I = 1 To TotalERows
        EValue = Range("E" & I).Value
            If LowerBound < EValue And EValue < UpperBound Then
                Range("E" & I).Interior.ColorIndex = 3
            End If
    Next I
    

    【讨论】:

    • 这确实是个问题。我只是认为如果有必要,这种方法可能是一个有趣的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2015-12-26
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    相关资源
    最近更新 更多