Vba 用于将列与日期和Id组合并高亮显示的宏
我有A、B、D、E列 列A包含ID,列B仅包含匹配的ID。(有时在列B中找不到ID),列D包含源日期,列E包含开始日期。(列E有时没有任何日期) 我需要比较的日期和粘贴在f列的项目已经开始的结果 我有4箱 案例1。如果sorce日期小于开始日期的4周,则按时打印项目 案例2:如果源日期>开始日期的8周,则打印项目延迟 案例3:如果在A列和B列中存在Id,并且在E列中没有找到开始日期,那么它应该打印项目剩余 案例4:B列中没有id,也没有找到源日期,则不打印任何内容 我已经编写了比较日期的代码,但我突然想到在案例3中应该如何将其与Id进行比较Vba 用于将列与日期和Id组合并高亮显示的宏,vba,excel,Vba,Excel,我有A、B、D、E列 列A包含ID,列B仅包含匹配的ID。(有时在列B中找不到ID),列D包含源日期,列E包含开始日期。(列E有时没有任何日期) 我需要比较的日期和粘贴在f列的项目已经开始的结果 我有4箱 案例1。如果sorce日期小于开始日期的4周,则按时打印项目 案例2:如果源日期>开始日期的8周,则打印项目延迟 案例3:如果在A列和B列中存在Id,并且在E列中没有找到开始日期,那么它应该打印项目剩余 案例4:B列中没有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
Sub-dateCompare()
暗r和长zLastRow和长zLastRow
暗淡的Z周为双倍,Z色为长
将Ztext设置为字符串
zLastRow=单元格(Rows.Count,“D”).End(xlUp).Row
对于r=2到zLastRow
如果Len(Trim(Cells(r,“E”)))=0,则
单元格(r,6)=“剩余”
单元格(r,6)。Interior.Color=vbYellow
单元格(r,7)=“黄色”
其他的
zWeeks=DateDiff(“w”,单元格(r,“D”),单元格(r,“E”))
选择病例周
病例>8例
zcolour=vbRed
Ztext=“延迟”和Int(zWeeks)和“周”
单元格(r,7)=“红色”
病例<4例
zcolour=vbGreen
Ztext=“准时”
单元格(r,7)=“绿色”
案例4至8
zcolour=vbYellow
Ztext=“剩余”
单元格(r,7)=“黄色”
其他情况
zcolour=无
Ztext=“检查日期”
结束选择
单元格(r,“F”).Interior.Color=zcolour
单元格(r,“F”)=Ztext
如果结束
下一个r
端接头
如果单元格(r,“A”)和单元格(r,“B”)以及单元格(r,“E”)=”那么
“做点什么
如果结束
如果单元格(r,“A”)和单元格(r,“B”)以及单元格(r,“E”)=”那么
“做点什么
如果结束
案例1。如果sorce日期小于开始日期的4周,则按时打印项目
案例3:如果在A列和B列中存在Id,并且在E列中没有找到开始日期,那么它应该打印项目剩余
现在你有4个公式。只要加入他们,你就会得到
=IF(AND(B2=“”,D2=“”),“没有”,IF(AND(A2)”,B2“),IF(E2=“”,“项目剩余”,IF(IFERROR(DATEDIF(E2,D2,“d”),7)/7>8,“项目延迟”,IF(IFERROR(DATEDIF(D2,E2,“d”)/7,5)8,“项目延迟”,IF(IFERROR(DATEDIF(D2,E2,“d”)/7,5)
案例1.如果sorce日期小于开始日期的4周,则按时打印项目
案例3:如果在A列和B列中存在Id,并且在E列中没有找到开始日期,那么它应该打印项目剩余
现在你有4个公式。只要把它们连接起来,你就会得到
=IF(AND(B2=“”,D2=“”),“没有”,IF(AND(A2)”,B2“),IF(E2=“”,“项目剩余”,IF(IFERROR(DATEDIF(E2,D2,“d”),7)/7>8,“项目延迟”,IF(IFERROR(DATEDIF(D2,E2,“d”)/7,5)8,“项目延迟”,IF(IFERROR(DATEDIF(D2,E2,“d”)/7,5)你真的需要保存这些颜色吗?否则,条件格式是一种更简单的方法。我需要保存这些颜色,因为在我评估的后期我正在使用它们。@josef HoppeWhy VBA而不是Excel公式:)因为,我想用vb练习。这就是为什么:)@SiddharthRoutBTW inDateDiff(“w”,Cells(r,“D”),Cells(r,“E”))
几个星期以来,你必须使用“ww”而不是“w”,你真的需要保存这些颜色吗?否则,条件格式是一种更简单的方法。我需要保存这些颜色,因为在我评估的后期我正在使用它们。@josef HoppeWhy VBA而不是Excel公式:)因为,我想用vb练习。这就是为什么:)@SiddharthRoutBTW inDateDiff(“w”,Cells(r,“D”),Cells(r,“E”))
数周来,你不得不用“ww”而不是“w”来测试它,但我喜欢“simply”部分;)这确实是一个非常简短的公式。不过,你需要用红色来延迟项目我相信红色部分可以通过条件格式来处理;)同样对于简单的部分,你可能错过了文章末尾的注释:D+1仅仅是为了让这个长公式起作用,我处理错了这些,太多了“
,我发现上面的VBA解决方案更容易实现和编辑,事实上它是我的;)@ShaiRado:我对代码没有任何异议(你提到过你的代码)OP张贴。我确信在SO中有很多公式专家。巴里·胡迪尼和斯科特·克兰纳是公式专家,我确信他们能想出比我更好的公式。想法是在VBA上使用公式,如果仍然需要使用VBA,则将公式移植到VBA。比在代码中循环要少得多,速度也快得多。就像我id..与发布的VBA代码无关:Dlol@ShaiRado.我不知道这一点,因此我不想让你感觉不好;)没有测试,但我喜欢“简单”部分;)确实是一个非常简短的公式。但是,项目延迟需要红色。我相信红色部分可以通过条件格式处理;)同样对于简单的部分,你可能错过了文章末尾的注释:D+1仅仅是为了让这个长公式起作用,我处理错了这些,太多了“
,我发现上面的VBA解决方案更容易实现和编辑,事实上它是我的;)@ShaiRado:我对代码没有任何异议(你提到过你的代码)OP发布。我确信在SO中有很多公式专家。巴里·胡迪尼和斯科特·克兰纳是公式专家,我确信他们能想出比我更好的公式。想法是在VBA上使用公式,如果仍然需要使用VBA,则将公式移植到VBA。很多错误
If Cells(r, "A") <> "" And Cells(r, "B") <> "" And Cells(r, "E") = "" Then
' do something
End If
=IF(IFERROR(DATEDIF(D2,E2,"d")/7,5)<4,"Project in Time","-")
=IF(IFERROR(DATEDIF(E2,D2,"d"),7)/7>8,"Project Delay","-")
=IF(AND(A2<>"",B2<>""),IF(E2="","Project remaining",""),"")
=IF(AND(B2="",D2=""),"Nothing","")
With Range("F2:F" & zLastRow)
.Formula = "=IF(AND(B2="""",D2=""""),""Nothing"",IF(AND(A2<>"""",B2<>"""")," & _
"IF(E2="""",""Project remaining"",IF(IFERROR(DATEDIF(E2,D2,""d"")," & _
"7)/7>8,""Project Delay"",IF(IFERROR(DATEDIF(D2,E2,""d"")/7,5)<4" & _
",""Project in Time"",""""))),""""))"
.Value = .Value
End With
Sub Sample()
zLastRow = 5
With Range("F2:F" & zLastRow)
.Formula = "=IF(AND(B2="""",D2=""""),""Nothing"",IF(AND(A2<>"""",B2<>"""")," & _
"IF(E2="""",""Project remaining"",IF(IFERROR(DATEDIF(E2,D2,""d"")," & _
"7)/7>8,""Project Delay"",IF(IFERROR(DATEDIF(D2,E2,""d"")/7,5)<4" & _
",""Project in Time"",""""))),""""))"
.Value = .Value
End With
End Sub
Sub Sample()
zLastRow = 5
With Range("F2:F" & zLastRow)
.Formula = "=IF(AND(A2<>"""",B2<>""""),IF(E2="""",""Project remaining""," & _
"IF(IFERROR(DATEDIF(E2,D2,""d""),7)/7>8,""Project Delay""," & _
"IF(IFERROR(DATEDIF(D2,E2,""d"")/7,5)<4,""Project in Time"",""""))),"""")"
.Value = .Value
End With
End Sub
Sub Sample()
Dim ws As Worksheet
Dim lRow As Long, i As Long
Dim zWeeks As Double, zcolour As Long
Dim Ztext As String
Set ws = Sheet1 '<~~ Change this to the relevant code
With ws
lRow = .Range("D" & .Rows.Count).End(xlUp).Row
For i = 2 To lRow
zWeeks = DateDiff("ww", .Range("E" & i).Value, .Range("D" & i).Value)
If .Range("A" & i).Value <> "" And .Range("B" & i).Value <> "" And .Range("E" & i).Value = "" Then
Ztext = "Project remaining"
zcolour = vbYellow
ElseIf zWeeks < 4 Then
Ztext = "Project on time"
zcolour = vbGreen
ElseIf zWeeks > 8 Then
Ztext = "Project delayed"
zcolour = vbRed
End If
With .Range("F" & i)
.Value = Ztext
.Interior.Color = zcolour
End With
Next i
End With
End Sub