Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 用于将列与日期和Id组合并高亮显示的宏_Vba_Excel - Fatal编程技术网

Vba 用于将列与日期和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,也没有找到源日期,则不打印任何内容 我已经编写了比较日期的代码,但

我有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进行比较

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 in
DateDiff(“w”,Cells(r,“D”),Cells(r,“E”))
几个星期以来,你必须使用“ww”而不是“w”,你真的需要保存这些颜色吗?否则,条件格式是一种更简单的方法。我需要保存这些颜色,因为在我评估的后期我正在使用它们。@josef HoppeWhy VBA而不是Excel公式:)因为,我想用vb练习。这就是为什么:)@SiddharthRoutBTW in
DateDiff(“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