我想我已经'过度思考'我的问题所以我从头开始了。
我有两个电子表格,一个是原始数据库(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
答案 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中找到新数据库的连接列来过滤新数据库的内容,如果您有|,则可以使用任何其他分隔符。在那里。