Excel VBA-比较列以进行匹配

Excel VBA-比较列以进行匹配,vba,excel,Vba,Excel,您好,我正在尝试比较同一excel工作表上的两个表。以下是我正在努力实现的目标。这必须在excel VBA中完成 A B C D E F G H I J E1 40 1 4 4/16/2017 E4 30 11/1/2017 E2 20 1 5 6/22/2016 E2 20 11/1/2017 E3 10 0 4

您好,我正在尝试比较同一excel工作表上的两个表。以下是我正在努力实现的目标。这必须在excel VBA中完成

A   B   C   D       E           F   G   H       I        J         
E1  40  1   4   4/16/2017       E4  30       11/1/2017
E2  20  1   5   6/22/2016       E2  20       11/1/2017
E3  10  0   4   6/30/2017       E1  40       10/31/2017
E4  30  1   6   3/10/2015       E3  10       10/31/2017
任务1

If A matches F (Equipment numbers match)
AND
If B matches G (ID-Numbers match)
AND 
If column C=1 (Equipment is in Service. C=0 means not in service)

Then
Update (copy/ paste) Column H with value in D (Update Inspection intervals from column D into H)

But 
If A doesn’t match F (Equipment numbers DO NOT match)
AND/ OR 
If B doesn’t match G (ID-Numbers DO NOT match)

Highlight the cell in column A
任务2

If A matches F (Equipment numbers match)
AND
If B matches G (ID-Numbers match)
AND 
If C=1 (Equipment is in Service. C=0 means not in service)
AND
If Column I (Inspection Due date) has a red OR Pink Cell highlighted 

Then
Update Column J with E (Update Inspection date (J) with Last Inspection date (E))

编辑:在您的评论中提供了进一步的信息之后,我已经调整了下面的代码,它现在应该适用于任务1,然后调整我为任务2显示的内容:

Sub Task_1()
    Dim X As Integer, Y as Integer, LastX as Integer
    For X = 2 to 10000
        If Range("A" & X).Value = "" Then Exit For
    Next X
    LastX = X - 1
    For X = 2 to LastX
        For Y = 2 to LastX
            If Range("F" & Y).Value = Range("A" & X).Value Then
                If Range("G" & Y).Value = Range("B" & X).Value Then
                    If CInt(Range("C" & X).Value) = 1 Then 
                        Range("H" & Y).Value = Range("D" & X).Value
                        GoTo Found_It
                    End If
                End If
            End If
        Next Y
        Range("A" & X).Interior.Color = vbCyan
Found_It:
    Next X
End Sub
编辑:任务2的代码存在以下问题:1。不能将两个结束子例程作为一个子例程的结束。2.对于任何包含多行的If-Then语句,必须有一个End If。3.您可以组合And参数以减少嵌套Ifs的数量。4.可以使用括号命名变量(括号是为数组值保留的)。下面的代码现在应该可以使用了

Sub Task_2()
    Dim X As Integer, Y As Integer, LastX As Integer
    Dim RGB1 As Long, RGB2 As Long

    RGB1 = RGB(255, 153, 204)
    RGB2 = RGB(255, 0, 0)

    For X = 2 To 10000
        If Range("B" & X).Value = "" Then Exit For
    Next X
    LastX = X - 1
    For X = 2 To LastX
        For Y = 2 To LastX
            If Range("W" & Y).Value = Range("B" & X).Value And Range("N" & Y).Value = Range("D" & X).Value And CInt(Range("E" & X).Value) = 1 Then
                If Range("I" & Y).Interior.Color.RGB = RGB1 Or Range("I" & Y).Interior.Color.RGB = RGB2 Then
                    Range("J" & Y).Value = Range("E" & X).Value
                    GoTo Found_It_2
                End If
            End If
        Next Y
        Range("B" & X).Interior.Color = vbCyan
Found_It_2:
    Next X
End Sub

是的,你的问题是有道理的。我做了一些修改以使它更有意义。请再看一遍这个问题。非常感谢您的帮助!通常情况下,人们会带着某种代码来,或者至少会表现出他们在解决问题上的努力。这种问题通常会在投票中被否决,结果没有人会试图帮助你。跟随你的岗位。您可能根本不知道excel中的vba。即使某人试图帮助你,你也不会知道如何粘贴代码并执行它。在这样问之前,请先做一下调查。sincerely@DucAnhNguyen非常感谢你的建议。我完全同意你的看法。我是这个网站的新手,我会确保按照你的建议去做。衷心感谢您。评论不用于长时间讨论;这段对话已经结束。