比较两张纸之间的行 - 函数

时间:2016-10-27 04:30:48

标签: google-sheets array-formulas

我想我已经'过度思考'我的问题所以我从头开始了。

我有两个电子表格,一个是原始数据库(org_DB),第二个是更新的数据库(new_DB)。 org_DB的行数约为15,000,new_DB的行数约为18,000。相关的连续列数在两者中都是14。

我需要第三张表,结果只包含原始数据库中不同的new_DB条目,以及所有new_DB条目,这些条目都是ADDITIONAL。

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

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

我认为我需要这两个定义,因为'new DB'比'org DB'更长,并且我的所有公式都在org_DB的结束点失败。

两个测试大小的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

结果数据库(我正在寻找的结果)

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.在ArrayFormula包装器中使用时,将行比较功能从IF ArrayFormula更改为SUMPRODUCT会产生错误的结果。

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

任何人都可以帮忙。 TIA

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

此处的测试表:Test DB Sheet

1 个答案:

答案 0 :(得分:0)

对于很多专栏来说,这看起来真的很难看,这就是为什么我要求你有任何你可以限制自己的专栏。

=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$2:$A$9 & "|" & 
                'Org DB'!$B$2:$B$9 & "|" &
                'Org DB'!$C$2:$C$9 & "|" & 
                'Org DB'!$D$2:$D$9,
                0))))

这会根据是否可以在Org DB中找到新数据库的连接列来过滤新数据库的内容,如果您有|,则可以使用任何其他分隔符。在那里。