比较两张纸上的两个列

时间:2019-08-06 15:04:21

标签: excel vba

我想要一种比较快速的方法来比较两个工作表中的两个范围,每个工作表中都有大约15000行。

如果它们匹配,则在J列中打印“未更改”,否则在K列中打印“已更改”。

当sheet1和sheet2顺序不正确时,此代码不起作用。

Dim array_a, array_b, array_c, array_d As Variant
Dim lastrow_a, lastrow_b As Integer
Dim i, ii As Integer

lastrow_a = Worksheets("Current_Month").Cells(Rows.Count, "A").End(xlUp).Row
lastrow_b = Worksheets("Last_Month").Cells(Rows.Count, "B").End(xlUp).Row

array_a = Worksheets("Current_Month").Range("F2:F" & lastrow_a).Value
array_b = Worksheets("Last_Month").Range("F2:F" & lastrow_b).Value

ReDim array_c(1 To WorksheetFunction.Max(UBound(array_a, 1), UBound(array_b, 1)), 1)
ReDim array_d(1 To WorksheetFunction.Max(UBound(array_a, 1), UBound(array_b, 1)), 1)

For i = 1 To WorksheetFunction.Min(UBound(array_a, 1), UBound(array_b, 1))
    If array_a(i, 1) = array_b(i, 1) Then
        array_c(i, 0) = "Nothing Changed"
    Else: array_d(i, 0) = "Something Changed"
    End If
Next i

Worksheets("Current_Month").Range("J2:J" & UBound(array_c, 1)).Value = array_c
Worksheets("Current_Month").Range("K2:K" & UBound(array_c, 1)).Value = array_d

End Sub

1 个答案:

答案 0 :(得分:0)

阅读评论中的评论后发布答案:

然后,您只需要一个match()公式,并且不需要VBA,但需要进行一些错误处理,例如:

=IF(ISERROR(MATCH(Sheet1!A1,Sheet2!A:A,0)),"Changed","No Change")

如果match()未找到匹配项,则会引发错误,使用iserror()确定if-statement中的是还是假,可以让您说出何时找到匹配项(没有错误=否),它会写“没有变化”,而当在范围内没有发现任何东西(错误= true)时,它会说“已更改”。

与第一条评论相比,唯一的变化是我给了您一个范围sheets2!A:A,而不是1:1的单元格比较。