Teylyn 的回答对我来说很有效,但我必须对其进行一些修改才能获得正确的结果。我想为需要它的人提供一个扩展的解释。
我的设置如下:
- Sheet1:2014年完整数据
- Sheet2:在 A1:D50 中更新了 2015 年的行,
按第一列排序
- Sheet3:合并行
- 我的数据没有标题行
我在 Sheet3 的 A1 单元格中输入了以下公式:
=iferror(vlookup(Sheet1!A$1;Sheet2!$A$1:$D$50;column(A1);false);Sheet1!A1)
阅读如下:取 Sheet1 中第一列的值(旧数据)。在 Sheet2 中查找(更新的行)。如果存在,则从 Sheet2 中指示的列中输出值。出错时,输出 Sheet1 当前列的值。
注意事项:
将公式粘贴到 A1 中后,我将范围扩展到 B、C 等列,直到达到表格的整个宽度。由于使用了 $ 符号,这在单元格 B1、C1 等中给出了以下公式:
=IFERROR(VLOOKUP('Sheet1'!$A1;'Sheet2'!$A$1:$D$50;COLUMN(B1);FALSE);'Sheet1'!B1)
=IFERROR(VLOOKUP('Sheet1'!$A1;'Sheet2'!$A$1:$D$50;COLUMN(C1);FALSE);'Sheet1'!C1)
等等。请注意,查找仍然在第一列中完成。这是因为 VLOOKUP 需要在完成查找的列上对查找数据进行排序。然而,输出列是粘贴公式的列。
接下来,在 Sheet 3 中选择一个矩形,从 A1 开始,并具有 Sheet1 中数据的大小(行数和列数相同)。按 Ctrl-D 将第一行的公式复制到所有选定的单元格。
单元格 A2、A3 等会得到这些公式:
=IFERROR(VLOOKUP('Sheet1'!$A2;'Sheet2'!$A$1:$D$50;COLUMN(A2);FALSE);'Sheet1'!A2)
=IFERROR(VLOOKUP('Sheet1'!$A3;'Sheet2'!$A$1:$D$50;COLUMN(A3);FALSE);'Sheet1'!A3)
因为使用了$-signs,所以查找区域是不变的,但是输入数据是从当前行开始的。