如何比较2个工作簿列并将重复项显示为新列表?

我有两个不同的工作簿,一个工作簿中有大约15列和50k行,另一个工作簿中有10列和1000行,只有2列(partnumber,changelevel)是相同的。 所以我想从这两本工作手册中得到两份报告。

  1. logging共同的部分号码,并将其作为一个报告更改为不同的工作簿。
  2. 我想删除第一个工作簿中的通用零件编号和更改级别logging,并将所有剩余logging复制到另一个工作簿中作为另一个报告。

Angiee。 。 。

你有几个问题需要回答之前,任何人都可以帮助你。

  1. 这是一次性处理,你正在试图清理数据,并提出一个新的起点,你不需要一遍又一遍地运行这个过程?

  2. 我们可以假设这两个工作簿中的数据行不在同一个Worksheet行中吗?

如果这两个问题的答案是YES,那么我不得不说,Excel绝对不是您应该使用的Office应用程序。 我build议您将两个工作簿作为单独的表导入到Access数据库中。 这样你就可以使用SQL来执行匹配和查找,只需要很less的代码或者不需要代码。 一旦你有你想要的结果,你可以轻松地将查询结果导回到Excel工作簿。 你可能可以在一个小时内得到答案。 如果使用此选项,则还可以将工作表链接到Access数据库,并避免导入它们。 它不会一样快,但它会工作。

否则,如果你坚持使用Excel,那么你要么有大量的代码来编写这样的代码:循环遍历一个工作簿中的所有logging,查找另一个工作簿中的值,然后在更多的工作簿中生成输出。 。 。 要么 。 。 。 您可以尝试将具有1000条logging的工作表复制到其他工作簿,然后使用工作表函数VLOOKUP和/或HLOOKUP创build大量公式。 (我不能良心认可这个第二种方法,但是如果你对VBA不是很有经验,那么对你来说可能是更好的方法)。

无论哪种方式,您将与Excel解决scheme一起,会有很多工作。

如果你有任何具体的编码问题,那么你是在正确的位置。 但是你需要先select一个方法。

祝你好运!

道格

问题是一个容易回答的问题,这个问题有两个方面。

  1. 你的电脑有多快?
  2. 你需要多久运行一次这段代码?

我问这些问题的原因是因为运行5万行的任何代码,无论实际上使这项工作的代码有多小…您需要有一个相当强大的计算机,否则这个代码是要拖延你的计算机,或至less超过一分钟到三分钟+取决于有多快,你有多less内存。

没有看到你的工作簿,你需要一些非常简单的公式,但你将不得不做的是添加另一行到工作簿。 在P栏中,您需要validation公式。 这个公式很简单,但是它取决于你需要多less参考点。

=COUNTIFS('Sheet2'!$A:$A,$A3,'Sheet2'!$E:$E,$E3)

从那里你可以看到重复或不重复。 那么你可以在Q列中有这样一个公式:

=IF($P3,"SAME","")

它会告诉你,如果数据是相同的或不。 基本上它说,如果在单元格P3中除了0以外什么都没有,它会说有相同的东西,否则不是。

从那里你需要一个像这样的代码:

 Sub Update_TNOOR() Dim wsS1 As Worksheet Dim wsS2 As Worksheet Dim lastrow As Long, fstcell As Long Set wsS1 = Sheets("Sheet1") Set wsS2 = Sheets("Sheet2") With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False End With With wsS1 wsS1.Columns("P:Q").ClearContents ThisWorkbook.Sheets("Sheet1").Cells(1, 16).Value = “=COUNTIFS('Sheet2'!$A:$A,$A3,'Sheet2'!$E:$E,$E3)" ThisWorkbook.Sheets("Sheet1").Cells(1, 17).Value = “=IF($P3,"Same",””””)" wsS2.Columns("P:Q").ClearContents ThisWorkbook.Sheets("Sheet2").Cells(1, 16).Value = “=COUNTIFS('Sheet1'!$A:$A,$A3,'Sheet1'!$E:$E,$E3)" ThisWorkbook.Sheets("Sheet2").Cells(1, 17).Value = “=IF($P3,"Same",”Different”)" End With With Intersect(wsS1, wsS1.Columns("Q")) .AutoFilter 1, "<>Same" With Intersect(.Offset(2).EntireRow, .Parent.Range("B:Q")) .EntireRow.Delete End With .AutoFilter End With 'Blow away rows that are useless lastrow = wsS2.Range("A2").End(xlDown).Row wsS2.Range("P1:Q1").Copy wsS2.Range("P2:Q" & lastrow) With Intersect(wsS2.UsedRange, wsS2.Columns("Q")) wsS2.Range("P:Q").Calculate .AutoFilter 1, "<>Different" .SpecialCells(xlCellTypeVisible).EntireRow.Delete End With With wsS2 lastrow = wsS2.Range("A1").End(xlDown).Row Intersect(.UsedRange, .Range("A1:N" & lastrow)).Copy wsS1.Cells(Rows.Count, "B").End(xlUp).Offset(1) End With With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True End With End Sub 

这应该让你在路上…如果我读你正在尝试做正确的。

正如人们所说的,你想要做的事情可以在Excel中完成,如果我不知道…这里的人们似乎不这么认为,但是如果你需要使用excel,这应该会让你走上正路。

再次,我不知道你的工作簿是什么样子,所以我希望这有助于。 这比较数据并将其合并到第一张表中。 IT不会做你想做的一切事情……但这应该让你走上正路。