好的 - 已多次询问此问题,但又要求寻求最佳解决方案:
我有两个excel文件(不是表格)。第一张excel表非常庞大,有近200,000条记录。其中一个(性别)已损坏,我必须修复它 我有第二个excel文件,它只有大约200条记录 - 这些记录对于那些搞砸了的记录具有正确的值。
这是具有正确值的文件,只有大约200条记录(只有损坏的记录)。
现在我需要一个宏,我需要在200,000条记录中找到这200条记录(按员工ID)并用正确的值替换性别值。
我找到了类似here的东西。但我不想200次循环200,000条记录。感觉就像性能开销。
有更好的选择吗?
我在想一个理想的解决方案
还有其他更好的解决方案吗?任何投入都很高兴
答案 0 :(得分:1)
通过VBA执行此操作的一种方法是循环执行200次更正,将ID与MATCH函数进行比较以找到它所属的行,而不是第二次循环(第二次循环到20000将需要很长时间你说)。
对于以下sub,我已将200表复制并粘贴到20000表的第5:7列中,您可以轻松地自动完成此部分,或者只为代码的每个部分输入正确的工作表参考。 / p>
我还放入了一个检查行,以确保小表中的当前ID匹配,否则会引发错误。您可以在此错误捕获中将ELSE放在END IF之前,以突出显示实际未找到的任何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
答案 1 :(得分:0)
以超快的方式,复制您的CORRECT员工ID列表并粘贴到CORRUPT员工ID列表下方......突出显示重复项并更正突出显示的内容。
否则VLOOKUP可以标记哪些是腐败的?基本上从正确的列表中获取一个唯一的字段,并将其与您的损坏列表进行比较,然后修复~200错误。
答案 2 :(得分:0)
我假设员工ID是一个唯一的记录,因此您可以在正确的记录下粘贴正确的记录,按empID排序并突出显示重复记录以便轻松找到它们。