我有2张,只有2列:
一张(主)包含这两列的20k行,我有另一张(toImport),其中包含大约400行相同的两列。
由于重定向文件被发送到apache,我这样做是因为我们的Web环境发生了很大的结构变化,在导入20k行表中的那400行之前,我想评估一些场景:
换句话说,如果我有,在主文件中
a - > B'/ P>
并在toImport文件中
b - > ç
我希望能够在主文件中执行以下操作
a - > ç
b - > ç
最好的方法是什么?我想是VBA,还是数据透视表?有人能给我一些关于如何解决这个问题的想法。知道20k行循环400次可能很长,他们必须快速工作,但我不知道。
感谢您的帮助。
答案 0 :(得分:1)
假设旧网址和新网址位于两张表的A列和B列中,您可以执行以下步骤:
按A列排序master
和toImport
。
将以下公式添加到master
的C列:
= IF(ISNA(VLOOKUP(A1, toImport!A:A, 1, FALSE)), IF(ISNA(VLOOKUP(B1, toImport!A:A, 1, FALSE)), B1, VLOOKUP(B1, toImport!A:B, 2, FALSE)), VLOOKUP(A1, toImport!A:B, 2, FALSE))
对于toImport
中旧网址或新网址与master
中的旧网址和toImport
中的新网址匹配的行,这将为您提供master
的新网址对于没有的行。
复制(或剪切)master
的C列并将值粘贴到B列。
现在,您已处理toImport
上更新master
上现有网址的所有内容的更新。
将以下内容添加到toImport
:
= IF(ISNA(VLOOKUP(A1, master!A:A, 1, FALSE)), A1, "")
= IF(ISNA(VLOOKUP(A1, master!A:A, 1, FALSE)), B1, "")
仅当toImport
具有旧网址的新值时,才会为您提供非空白值。
对列C不为空的行过滤toImport
。
将toImport
的C和D列中的非空白单元格复制,并将值粘贴到master
的A和B列的底部。
您可以通过录制上述步骤的手动执行宏来自动执行此过程。一般来说,这个宏工作不应该花费太多。
答案 1 :(得分:0)
我会在VBA变体数组中获得两组数据,然后循环执行测试然后将数组放回去。这可能足够快。如果它不够快,那么你可以对数据进行排序并使用二进制搜索。
关键技巧是使用单个语句将整个范围放入数组中:
Dim vMaster as variant
vMaster=Worksheets("Master").Range("a1:B20400")
更新数组后,您可以通过反转作业将其写回。