在20k行表中导入400行并在导入之前进行操作
我有2张只有2列:
- 旧的url
- 新的url
一张纸(主)包含这两列20k行,我有另一张(toImport)约400行这两列相同。
由于它是一个redirect文件发送到Apache,我这样做是因为在我们的networking环境中的一个大的结构变化,在20k行表中导入这些400行之前,我想评估一些情况:
- 如果toImport文件中的旧对和新对已经在主文件中,则不执行任何操作
- 如果toImport文件中的旧URL位于主文件的新URL列中,请执行以下操作:
- 将来自toImport文件的新URL值放入主站点的新URL值(为了不创build级联redirect)
- 还要从主导文件中导入新导入的旧/新对(为了让用户在知道最后一个活动URL的情况下访问新页面)。
换句话说,如果我有,在主文件中
a – > b
并在toImport文件中
b – > c
我希望能够在主文件中执行以下操作
a – > c
b – > c
什么是最好的办法呢? VBA我想,或数据透视表? 有人能给我一些关于如何解决这个问题的想法。 知道20k排可以打400次,他们必须是一个快速的工作方式,但我不知道。
谢谢你的帮助。
假设您的旧url和新url位于两张表的A和B列中,则可以执行以下步骤:
-
按
master
列A和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
的新url,toImport
查看master
中的旧url或新url与toImport
中的旧url相匹配的行,以及来自master
url的新url中没有的行。 -
复制(或剪切)
master
C列和粘贴值到列B.现在,您已经处理了更新
toImport
所有更新master
上现有URL的更新。 -
将以下内容添加到
toImport
C和D列中:= IF(ISNA(VLOOKUP(A1, master!A:A, 1, FALSE)), A1, "")
= IF(ISNA(VLOOKUP(A1, master!A:A, 1, FALSE)), B1, "")
只有当
toImport
有一个旧URL的新值时,这会给你非空白值。 -
筛选
toImport
列中C不为空的行。 -
将
toImport
C和D列中的非空单元块复制,并将Paste ValuestoImport
到master
A和B列的底部。
您可以通过录制上述步骤的手动执行macros来自动执行此过程。 一般来说,这个macros观工作不应该花太多时间。
我将在VBA变体数组中获取两组数据,然后循环执行testing,然后放回数组。 这可能会很快。 如果速度不够快,那么可以对数据进行sorting并使用二进制search。
关键技巧是使用单个语句将整个范围转换为数组:
Dim vMaster as variant vMaster=Worksheets("Master").Range("a1:B20400")
更新数组后,您可以通过反转分配来将其写回。