VBAmacros比较一行,看看它是否存在于另一个工作簿中

我试图创buildVBA代码,逐行检查是否在另一个工作簿中存在一行,并重复执行直到它用完行以检查另一个工作簿。 然后对于每一行,发现不存在将其副本发送到一个新的工作簿。 我已经尝试了几个星期的search,但是每个人都想检查是否存在单行,我需要检查另一个工作簿中是否存在500k行。

Private Sub CommandButton3_Click() Dim varSheetA As Variant Dim varSheetB As Variant Dim strRangeToCheck As String Dim iRow As Long Dim iCol As Long nlin = 1 ncol = 1 'Get the worksheets from the workbooks Set wbkA = Workbooks.Open(Application.GetOpenFilename) Set varSheetA = wbkA.Worksheets("Sheet1") ' or whatever sheet you need Set wbkB = Workbooks.Open(Application.GetOpenFilename) Set varSheetB = wbkB.Worksheets("Sheet1") ' or whatever sheet you need strRangeToCheck = "A1:A999999" ' If you know the data will only be in a smaller range, reduce the size of the ranges above. Debug.Print Now varSheetA = varSheetA.Range(strRangeToCheck) varSheetB = varSheetB.Range(strRangeToCheck) Debug.Print Now Dim ws As Variant 'Set lol = Workbooks.Open("LOL.xlsm") Set ws = Workbooks.Add.Sheets("Sheet1") For iRow = LBound(varSheetA, 1) To UBound(varSheetA, 1) For iCol = LBound(varSheetA, 2) To UBound(varSheetA, 2) If varSheetA(iRow, iCol) = varSheetB(iRow, iCol) Then ' Cells are identical. ' Do nothing. Else ws.Cells(nlin, ncol + 1) = varSheetA(iRow, iCol) 'Gives me the value in workbookA ws.Cells(nlin, ncol + 2) = varSheetB(iRow, iCol) 'Gives me the value in workbookB nlin = nlin + 1 End If Next Next ws.Cells.EntireColumn.AutoFit End Sub 

这是我所拥有的,但它只检查同一行之间的差异,这不是我想要的。

这不是一个“cody”的方式来做事情,更像是用辅助列操作Excel电子表格,但是将screenupdating设置为false,它比循环遍历行和列以及检查每行和单元的布尔操作快得多第二张。 这只是两行1000行的工作表的一个例子,我省略了这些声明,实际上只是为了突出显示技术:

 ws1.Range("D1:D1000").Formula = ("=A1&B1&C1") ws2.Range("D1:D1000").Formula = ("=A1&B1&C1") ws1.Range("E1:E1000").Formula = ("=IFERROR(MATCH(D1,'" & ws2.Name & "'!D:D,0),"""")") For Each c In ws1.Range("E1:E20") If c.Value = "" Then ' copy row to another sheet Next c