【发布时间】:2017-06-20 14:54:28
【问题描述】:
我有 A、B、D、E 列 A 列包含 ID,B 列仅包含匹配的 ID。 (有时在 B 列中找不到 ID)并且 D 列包含源日期,E 列包含开始日期。(E 列有时没有任何日期)
我需要比较日期并将结果粘贴到项目已启动的 f 列中。
我有 4 个案例。
案例 1. 如果源日期小于开始日期的 4 周,则按时打印 Project。
案例 2:如果源日期是开始日期的 > 8 周,则打印 Project delay。
案例 3:如果在 A 和 B 列中存在 Id 并且在 E 列中没有找到开始日期,那么它应该打印剩余项目。
案例 4:B 列中没有 id,也没有找到源日期,然后什么也不打印。
我已经编写了比较日期的代码,但我很惊讶在案例 3 中我应该如何将它与 Id 进行比较。
Sub dateCompare()
Dim r As Long, zLastRow As Long
Dim zWeeks As Double, zcolour As Long
Dim Ztext As String
zLastRow = Cells(Rows.Count, "D").End(xlUp).Row
For r = 2 To zLastRow
If Len(Trim(Cells(r, "E"))) = 0 Then
Cells(r, 6) = " Remaining"
Cells(r, 6).Interior.Color = vbYellow
Cells(r, 7) = "Yellow"
Else
zWeeks = DateDiff("w", Cells(r, "D"), Cells(r, "E"))
Select Case zWeeks
Case Is > 8
zcolour = vbRed
Ztext = "Delayed " & Int(zWeeks) & " weeks"
Cells(r, 7) = "Red"
Case Is < 4
zcolour = vbGreen
Ztext = " On- Time"
Cells(r, 7) = " Green"
Case 4 To 8
zcolour = vbYellow
Ztext = "Remaining"
Cells(r, 7) = "Yellow"
Case Else
zcolour = none
Ztext = " check for dates"
End Select
Cells(r, "F").Interior.Color = zcolour
Cells(r, "F") = Ztext
End If
Next r
End Sub
【问题讨论】:
-
你真的需要保存这些颜色吗?否则,条件格式是一种更简单的方法。
-
我需要保存那些颜色,因为在我评估的后期阶段我正在使用它们。 @约瑟夫霍普
-
为什么是 VBA 而不是 Excel 公式 :)
-
因为我想用vb练习。这就是为什么:) @SiddharthRout
-
顺便说一句,
DateDiff("w", Cells(r, "D"), Cells(r, "E"))几周内你必须使用“ww”而不是“w”