Excel VBA-比较列以进行匹配
您好,我正在尝试比较同一excel工作表上的两个表。以下是我正在努力实现的目标。这必须在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
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非常感谢你的建议。我完全同意你的看法。我是这个网站的新手,我会确保按照你的建议去做。衷心感谢您。评论不用于长时间讨论;这段对话已经结束。