如果大于今天突出细胞问题

Dek*_*eke 1 excel vba

我正在尝试设置一个简单的解决方案来突出显示日期大于今天日期的单元格.我目前拥有以下内容:

Sub Test()
    Dim lrow As Long
    lrow = Cells(Rows.Count, 1).End(xlUp).Row
    Columns("H:H").EntireColumn.AutoFit
    If Range("H2:H" & lrow).Value > Date Then Cell.Interior.Color = vbYellow
End Sub
Run Code Online (Sandbox Code Playgroud)

我不断得到"类型不匹配"错误,但列(H)格式化为日期,所以我不确定我做错了什么.任何帮助或方向将不胜感激.

Mat*_*don 5

Range("H2:H" & lrow).Value将是一个2D数组(如果涉及多个单元,则Valuea Range总是一个2D数组); 你得到一个类型不匹配错误,因为你无法将2D数组与a进行比较Date; 如果您不能使用条件格式,则需要比较各个数组下标.

你要做的最后一件事是迭代每个单独的单元格(否则你的下一个问题将是"如何让这个循环运行得更快?").获取该数组Variant,并迭代该数组 - 因为它只有1列,使其成为一维数组Application.Transpose:

Dim values As Variant
values = Application.Transpose(Range("H2:H" & lastRow).Value)

Dim i As Long, current As Long
For i = LBound(values) To UBound(values)
    current = i + 1 'array would be 1-based, so to start at row 2 we need to offset by 1
    If values(i) > Date Then
        ActiveSheet.Cells(current, 8).Interior.Color = vbYellow
    End If
Next
Run Code Online (Sandbox Code Playgroud)

这样你就可以在必要时点击工作表.

  • @Deke请注意,您选择的答案是最慢的工作解决方案.它不会扩展,并且会在给定大量单元格进行迭代的情况下执行得非常糟糕.如果您需要高性能代码,请尽可能避免访问工作表. (2认同)