我已经检查了其他问题中给出的答案,但由于我是excel vba宏的新手,我真的找不到使用提供的解决方案解决问题的方法。
编辑:我无法自己编写代码。我在一个月前开始使用宏,从不同的帖子复制和粘贴,并根据需要进行编辑,通常需要修复许多错误。这非常令人沮丧,但我认为这个问题太大了,无法自己完成。
提前感谢您的帮助和分享知识。
我有两张excel表:
示例:
第1页
A B C D E
1 Code Revision Status
2 102 0 C
3 102 1 A
4 89 0 A
5 216 0 C
6 216 1 B
7 216 2 A
8 217 0 B
第2页
A B C D E
1 Code Revision Status
2 102 0 A
3 102 1 A
4 89 0 A
5 90 0 A
6 216 0 C
7 216 1 B
8 216 2 A
9 16 0 A
宏运行后,Sheet 1和Sheet 2中的结果应为:
结果会使以下单元格变红:
表1:
表2:
再次感谢。
答案 0 :(得分:0)
好的,我可以设法准备这些或多或少做我想要的代码,并进行一些修改以加速测试:
它检查两张表中的一组列表(3列),并验证此帖中先前所述的所有条件是否匹配。
如果发生匹配,它会在E列中添加一个值为“Ok”的新值。
这与Excel工作表中的条件格式相结合,突出显示匹配值为A,B和C的行。
代码似乎有效并且可能会采取一些改进措施,但由于我必须处理数千行,我担心这会花费太长时间。
是否有更有效的方法,而不是遍历所有行?
这是代码:
Sub Compare()
' Declare all the variables needed
Dim rng1 As Range, rng2 As Range, rngName As Range, i As Integer, j As Integer
Dim varCode1 As Integer
Dim varRevision1 As Integer
Dim varStatus1 As String
Dim varCode2 As Integer
Dim varRevision2 As Integer
Dim varStatus2 As String
' Process second sheet
For i = 2 To Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row
Set rng1 = Sheets("Sheet2").Range("A" & i)
varCode2 = Sheets("Sheet2").Range("A" & i).Value
varRevision2 = Sheets("Sheet2").Range("B" & i).Value
varStatus2 = Sheets("Sheet2").Range("C" & i).Value
' MsgBox "Code " & varCode2 & ", Rev. " & varRevision2 & ", Status " & varStatus2
For j = 2 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set rng2 = Sheets("Sheet1").Range("A" & j)
If rng1.Value = rng2.Value Then
varCode1 = rng2.Copy
varRevision1 = Sheets("Sheet1").Range("B" & j).Value
varStatus1 = Sheets("Sheet1").Range("C" & j).Value
' This will just write 'Ok' in cells with matches between column A and B
If varRevision1 = varRevision2 And varStatus1 = varStatus2 Then
Worksheets("Sheet2").Range("E" & i).Value = "Ok"
End If
End If
Set rng2 = Nothing
Next j
Set rng1 = Nothing
Next i
' Process first sheet
For i = 2 To Sheets("Sheet1").Range("A" & Rows.Count).End(xlUp).Row
Set rng1 = Sheets("Sheet1").Range("A" & i)
varCode1 = Sheets("Sheet1").Range("A" & i).Value
varRevision1 = Sheets("Sheet1").Range("B" & i).Value
varStatus1 = Sheets("Sheet1").Range("C" & i).Value
' MsgBox "Code " & varCode2 & ", Rev. " & varRevision2 & ", Status " & varStatus2
For j = 2 To Sheets("Sheet2").Range("A" & Rows.Count).End(xlUp).Row
Set rng2 = Sheets("Sheet2").Range("A" & j)
If rng1.Value = rng2.Value Then
varCode2 = rng2.Copy
varRevision2 = Sheets("Sheet2").Range("B" & j).Value
varStatus2 = Sheets("Sheet2").Range("C" & j).Value
' This will just write 'Ok' in cells with matches between column A and B
If varRevision2 = varRevision1 And varStatus2 = varStatus1 Then
Worksheets("Sheet1").Range("E" & i).Value = "Ok"
End If
End If
Set rng2 = Nothing
Next j
Set rng1 = Nothing
Next i
End Sub