比较两张纸之间的行 - 功能

Compare rows between two sheets - Function

我觉得我“想多了”我的问题,所以我要从头再来。

我有两个传播sheets,一个是原始数据库(org_DB),第二个是更新后的数据库(new_DB)。 org_DB 的行数约为 15,000,new_DB 的行数约为 18,000。两者相关的连续列数正好是 14。

我需要第三个 sheet 结果,它只包含与原始数据库不同的 new_DB 条目,以及所有额外的 new_DB 条目。

DIFFERENT 的定义是差异大于 0 的行。

ADDITIONAL 的定义是没有等价的行。

我想我需要这两个定义,因为“new DB”比“org DB”长,而且我的所有公式都在 org_DB 的终点失败。

两个测试大小的数据库是:

org_DB

Code 1    Code 2    Code 3    Code 4
AA00001    AAGA    1180218        24
AA00007    AAGA    03821787-97    58
AA00008    AAGA    11821260-99    59
AA00009    AAGA    11001017       60
AA00016    AAGA    3801648        67
AA00017    AAGA    3801649       120
AA00018    AAGA    3801692        66
AA00019    AAGA    03821084-61    70

new_DB

Code 1    Code 2    Code 3    Code 4
AA00001    AAGA    1180218        24
AA00008    AAGA    11821260-99    59
AA00009    AAGA    11001015       60
AA00016    AAGA    3801648        67
AA00017    AAGA    3801649       120
AA00018    AAGA    3801692        69
AA00019    AAGA    03821084-61    70
XX00101    XXGA    1234X567X     101
XX00102    XXGB    1234X567X     101

Result DB(我要找的结果)

AA00009    AAGA    11001015    60
AA00018    AAGA    3801692     69
XX00101    XXGA    1234X567X  101
XX00102    XXGB    1234X567X  101

对于行比较(逐行工作)我使用

=if(ArrayFormula(sum(--(new_DB!A2:D2=org_DB!A2:D2)))<>4,"Copy row","Ignore")

为了得到我正在使用的结果数组

=filter(new_DB,if(ArrayFormula(sum(--(new_DB=org_DB)))<>4)

问题 1 是 FILTER 条件参数仅从 ArrayFormula 获取单个公式结果,因此失败并显示 #N/A - “FILTER 具有不匹配的范围大小。预期行数:nn,列数:1。实际行数:1,列数:1。”

问题 2 是 IF 之后的 ArrayFormula 正在比较 1 行和 nn 列 - 这是我想要的。将整个函数包装在另一个 ArrayFormula 中会产生更奇怪的结果。

问题 3。将行比较函数从 IF ArrayFormula 更改为 SUMPRODUCT 在 ArrayFormula 包装器中使用时会产生错误的结果。

我可以看出,如果我使用此方法,那么递归过程可能会非常冗长 - 所以我开始接受我的方法存在根本性缺陷。我应该对 A 列使用 VLOOKUP 和 FILTER 组合吗?A 列实际上是一个 SKU ID,因此应该始终是唯一的。

谁能帮忙。 TIA

请注意,org_DB 第 3 行 (AA0007...) 不在结果中。故意的。

在此处测试 sheet:Test DB Sheet

如果有很多列,这很快就会看起来非常丑陋,这就是为什么我要问你有没有你可以限制自己的列。

=ARRAYFORMULA(FILTER(
  'New DB'!A2:D10,
  ISERROR(MATCH('New DB'!A2:A10 & "|" & 
                'New DB'!B2:B10 & "|" &
                'New DB'!C2:C10 & "|" &
                'New DB'!D2:D10, 
                'Org DB'!$A:$A & "|" & 
                'Org DB'!$B:$B & "|" &
                'Org DB'!$C:$C & "|" & 
                'Org DB'!$D:$D,
                0))))

这通过是否可以在 Org DB 中找到 New DB 的串联列来过滤 New DB 的内容,如果有 | 则可以使用任何其他分隔符在那里。