我正在尝试生成一份报告,定期将当前原始数据与上一报告期的数据进行比较,仅有的显示某一列的值在两者之间发生变化的行(主键),或显示某一行在一个电子表格中存在而在另一个电子表格中不存在的行。
原始数据将放置在文件内的两个单独的工作表中,例如:
(注意:这些值的顺序可以是任意的,也不是连续的,而且还会有与示例/摘要无关的其他列)
工作表 1(旧数据):
首要的关键 | 价值 |
---|---|
A | 1 |
乙 | 2 |
C | 3 |
德 | 4 |
埃 | 5 |
工作表 2(当前数据):
首要的关键 | 价值 |
---|---|
A | 1 |
乙 | 100 |
德 | 4 |
F | 6 |
C | 3 |
我正在寻找一种解决方案,可以在单独的摘要表中提供以下结果没有完全编辑/添加数据工作表。
预期结果(在单独的工作表中,但在同一文件中):
首要的关键 | 旧值 | 新价值 |
---|---|---|
乙 | 2 | 100 |
埃 | 5 | 未找到 |
F | 未找到 | 6 |
在上面的例子中,由于值已更改,因此包含与 B 有关的信息。E 和 F 也包含在内,因为它们存在于一张表中,而不存在于另一张表中。A、C 和 D 不存在于输出中,因为它们同时存在于两张表中,并且每个键的值都相同。
还值得注意的是:此输出不是最终产品。此输出表中的键/值将需要可供更多表中的其他计算等参考。
答案1
如果您拥有最新版本的 Excel,则可以组合使用 UNIQUE、FILTER、VSTACK 函数来获取某一列中不同或不存在的主键。例如:
=UNIQUE(FILTER(UNIQUE(VSTACK(A3:B7,D3:E7),FALSE,TRUE),{1,0}))
您还可以使用利用 CHOOSECOLS 函数的这个公式:
=UNIQUE(CHOOSECOLS(UNIQUE(VSTACK(A3:B7,D3:E7),FALSE,TRUE),1))
然后,您可以使用 INDEX MATCH 函数查找旧值和新值。要查找旧值,请执行以下操作:
=IFERROR(INDEX($B$3:$B$7,MATCH(A11,$A$3:$A$7,0)),"Not found")
要找到新值:
=IFERROR(INDEX($E$3:$E$7,MATCH(A11,$D$3:$D$7,0)),"Not found")
向下拖动公式来填充单元格。