比较两张纸之间的行 - 功能
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 的内容,如果有 | 则可以使用任何其他分隔符在那里。
我觉得我“想多了”我的问题,所以我要从头再来。
我有两个传播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 的内容,如果有 | 则可以使用任何其他分隔符在那里。