差别,条件

我正在比较我的工作表中的date。 date在H和I列。

H列中的date称为S.date,我称为开始date。

列H被完全填充,而列I有几个空行。

我有几个案例,

案例1:如果开始date大于s.date的4周,那么我就按时打电话。 例如:s.Date:17.05.2017,开始date是20.06.2017,然后按时间调用。

case2:如果开始date是<8周od s.date,那么我称之为延迟。 case3:如果sart的date在s.date的4到8周之间,那么我把它叫做Remaining。

案例4:有些情况下,我的S.Date为31.03.2017,开始date为24.02.2017,我希望他们被打印为绿色。 我怎么能做到这一点? 任何人都可以build议我怎么能做到这一点?

Sub status() Dim ws As Worksheet Dim lrow As Long, i As Long Dim zWeeks As Double, zcolour As Long Dim Ztext As String Set ws = Sheets("Result") With ws lrow = .Range("H" & .Rows.Count).End(xlUp).Row For i = 5 To lrow zWeeks = DateDiff("ww", .Range("I" & i).Value, .Range("H" & i).Value) If .Range("E" & i).Value <> "" And .Range("F" & i).Value <> "" And .Range("I" & i).Value = "" Then Ztext = "remaining" zcolour = vbYellow Cells(i, 11) = "Yellow" ElseIf .Range("F" & i).Value = "" And .Range("I" & i).Value = "" Then GoTo nextrow ElseIf zWeeks < 4 Then Ztext = " on time" zcolour = vbGreen Cells(i, 11) = "Green" ElseIf zWeeks > 8 Then Ztext = " delayed" zcolour = vbRed Cells(i, 11) = "Red" ElseIf zWeeks > 4 < 8 Then Ztext = " remaining" zcolour = vbYellow Cells(i, 11) = "Yellow" End If With .Range("J" & i) .Value = Ztext .Interior.Color = zcolour End With nextrow: Next i End With End Sub 

下面的图片显示,需要的结果。我无法达到绿色的条件。因为在某些情况下,它返回负值,应该是绿色的。请帮我编写相应的代码

我想你想要的情况下…这是你的代码应该像他们一样:

 Sub Status() Dim ws As Worksheet Dim lrow As Long Dim i As Long Dim zWeeks As Double Dim zcolour As Long Dim Ztext As String Set ws = Worksheets(1) With ws lrow = .Cells(.Rows.Count, "H").End(xlUp).Row For i = 5 To lrow zWeeks = DateDiff("ww", .Range("I" & i).Value, .Range("H" & i).Value) Select Case True Case .Range("E" & i).Value <> "" And _ .Range("F" & i).Value <> "" And _ .Range("I" & i).Value = "" Ztext = "remaining" zcolour = vbYellow Cells(i, 11) = "Yellow" Call ColorMe(i, ws, Ztext, zcolour) Case .Range("F" & i).Value = "" And .Range("I" & i).Value = "" 'Do not write nothing here, to avoid the nasty goto Case zWeeks < 4 Ztext = " on time" zcolour = vbGreen Cells(i, 11) = "Green" Call ColorMe(i, ws, Ztext, zcolour) Case zWeeks > 8 Ztext = " delayed" zcolour = vbRed Cells(i, 11) = "Red" Call ColorMe(i, ws, Ztext, zcolour) Case zWeeks < 8 Ztext = " remaining" zcolour = vbYellow Cells(i, 11) = "Yellow" Call ColorMe(i, ws, Ztext, zcolour) End Select Next i End With End Sub Public Sub ColorMe(lng As Long, ws As Worksheet, Ztext As String, zcolour As Long) With ws.Range("J" & lng) .Value = Ztext .Interior.Color = zcolour End With End Sub 

什么改变了:

  • GoTo被避免,因为它应该只用于错误捕获。
  • 我已经添加了一个ColorMe()模块,以便仅对特定的案例进行着色,而不是对其进行着色。
  • 几乎就是这一切,它应该工作。 如果不是这样,我很确定你可以自己调整条件。

干杯! 🙂