Excel比较两张表并更新表1

好的 – 这个问题已经被多次询问了,但是又要求最好的解决办法:

我有两个excel文件(不是工作表)。 第一张表格非常庞大,接近20万条logging。 其中一列(性别)已损坏,我必须修复它。
我有第二个excel文件,它只有大约200条logging – 这些都是正确的值,这些是搞砸了。

例如:
拥有200,000条记录的主列表

这是只有大约200条logging(只有损坏的)有正确的值的文件。 在这里输入图像说明

现在我需要一个macros,我需要从200,000条logging中find这200条logging(通过员工ID),并用正确的性别值replace。
我在这里find类似的东西 。 但我不想循环200,000条logging200次。 感觉就像一个性能开销。 有更好的select吗?

我正在考虑一个理想的解决scheme

  1. 循环200个项目并使用每个循环的员工ID
  2. 获取该员工ID并在Master Excel的员工ID列中执行“查找”操作
  3. 如果find,请replace性别列值

会有其他更好的解决scheme吗? 任何投入都很欣赏

一种通过VBA做到这一点的方法是循环200次校正,将ID与MATCH函数进行比较,find它所属的行,而不是第二个循环(第二个循环到20000会像你说的那样花费时间) 。

对于下面的子我已经将200表复制并粘贴到20000表的列5:7中,您可以轻松地自动完成此部分,或者只是为代码的每个部分放入正确的工作表参考。

我也放了一个检查线,以确保有一个匹配的小表当前的ID,否则会抛出一个错误。 在这个错误捕获中,你可以在END IF之前放置一个ELSE来突出显示任何没有find的ID。 这里的代码,希望这种方法可以帮助!

Sub replace_things() With ActiveSheet For x = 2 To 200 'Change this to however many is in the small table cur = .Cells(x, 5) 'Defined cur as ID from small table aMatch = Application.WorksheetFunction.CountIf(.Range("A:A"), cur) 'Check to see there's a match in large table If aMatch > 0 Then ' if there's a match then... theRow = Application.WorksheetFunction.Match(cur, .Range("A:A"), 0) 'get the row number the match is actually on .Cells(theRow, 3) = .Cells(x, 7) 'when row is found, replace with the relevant value from col7 (col3 of small table) End If Next x End With End Sub 

一个超级快捷的方式,复制您的CORRECT员工ID列表并粘贴在CORRUPT员工ID列表下方…突出显示重复内容并更正突出显示。

否则VLOOKUP可以标记哪些是腐败的? 基本上从正确的列表中获得一个唯一的字段,并将其与您的损坏列表进行比较,然后修复〜200错误。

我假设雇员ID是一个独特的logging,所以你可以粘贴正确的现有的,通过empIDsorting,并突出重复find他们很容易。