在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列中,则可以执行以下步骤:

  1. master列A和toImport列。

  2. 将以下公式添加到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相匹配的行,以及来自masterurl的新url中没有的行。

  3. 复制(或剪切) master C列和粘贴值到列B.

    现在,您已经处理了更新toImport所有更新master上现有URL的更新。

  4. 将以下内容添加到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的新值时,这会给你非空白值。

  5. 筛选toImport列中C不为空的行。

  6. toImport C和D列中的非空单元块复制,并将Paste Values toImportmaster A和B列的底部。

您可以通过录制上述步骤的手动执行macros来自动执行此过程。 一般来说,这个macros观工作不应该花太多时间。

我将在VBA变体数组中获取两组数据,然后循环执行testing,然后放回数组。 这可能会很快。 如果速度不够快,那么可以对数据进行sorting并使用二进制search。

关键技巧是使用单个语句将整个范围转换为数组:

 Dim vMaster as variant vMaster=Worksheets("Master").Range("a1:B20400") 

更新数组后,您可以通过反转分配来将其写回。