VBA插入if - 根据日期更改单元格填充

时间:2012-07-17 14:53:51

标签: excel vba excel-vba

尝试在VBA中为以下内容插入公式;

在我的专栏K中,我想要三个条件:

  • 日期是今天或更早(即项目今天或更早)= RED
  • 日期是今天+最多7天= Amber
  • 今天的日期不超过7天=绿色

我正在考虑使用以下内容:

Sub ChangeColor()
    lRow = Range("K" & Rows.Count).End(xlUp).Row
    Set MR = Range("K3:K" & lRow)
    For Each cell In MR
        If cell.Value = "TODAY" Then cell.Interior.ColorIndex = 10
        If cell.Value = "TODAY-7days" Then cell.Interior.ColorIndex = 9
        If cell.Value = "Morethan7Days" Then cell.Interior.ColorIndex = 8
    Next
End Sub

我一直在尝试,但我不知道该怎么做。

我认为我的方式是正确的,但我不知道如何编码If date = -7days然后依此类推。

有人可以提供一些指导吗? :)

2 个答案:

答案 0 :(得分:2)

VBA有一个Date函数,可以返回今天的日期。 VBA中的日期是自1900年12月31日以来的天数(通常是闰年错误),因此您可以减去或添加整数到日期以获取过去和未来几天。

Sub ChangeColor()

    Dim rCell As Range

    With Sheet1
        For Each rCell In .Range("K3", .Cells(.Rows.Count, 11).End(xlUp)).Cells
            If rCell.Value <= Date Then
                rCell.Interior.Color = vbRed
            ElseIf rCell.Value <= Date + 7 Then
                rCell.Interior.Color = vbYellow
            Else
                rCell.Interior.Color = vbGreen
            End If
        Next rCell
    End With

End Sub

答案 1 :(得分:1)

先生。 Anderson是正确的,您可以使用条件格式来完成此操作,但是如果您想在VBA中执行此操作创建一个变量来保存日期并将其设置为当前日期减去时间。然后,您只想将单元格值格式化为日期格式。完成此操作后,您可以将dateAdd用于和减去天数。见下文

Sub ChangeColor()

Dim myDate As Date
'format the date excluding time
myDate = FormatDateTime(Now, 2)

lRow = Range("K" & Rows.Count).End(xlUp).Row
Set MR = Range("K3:K" & lRow)
    For Each cell In MR
        If FormatDateTime(cell.Value, 2) = myDate Then cell.Interior.ColorIndex = 10
        If FormatDateTime(cell.Value, 2) = DateAdd("d", -7, myDate) Then cell.Interior.ColorIndex = 9
        If FormatDateTime(cell.Value, 2) = DateAdd("d", 7, myDate) Then cell.Interior.ColorIndex = 8
    Next

End Sub

我确实注意到你检查它是否相等所以只有今天的日期,从今天开始的7天和今天的7天之前的日期将填充内部颜色。大于和小于填充所有内部单元格颜色

抱歉所有的修改