简短回答:这取决于您打算如何使用第三张纸。但这里有一个帮助您入门的解决方案,假设您在Sheet 1 中至少有一列保证包含每一行的值。在我的示例中,我们假设该列是 Sheet1!$B:$B。
我们的公式将输入Sheet3!A2,在列标题的正下方,然后从右往下填充。
首先,您需要获取Sheet1 的内容。这很简单:=Sheet1!A2。相对引用将复制整个表。
在某一时刻,您需要切换到Sheet2。你(或者更确切地说,公式)怎么知道什么时候?我们可以像这样计算Sheet1 中的行数:=COUNTA(Sheet1:$B:$B)--注意我们使用的列保证每行都有值。这是计算该列中的非空白单元格。
使用该行数,我们可以将当前 (Sheet3) 行与 Sheet1 行数进行比较,以确定是否该切换。可以通过=ROW()获取当前行(头行记得减1)。
如果我们把它们放在一起,我们就会得到我们的切换检查:
=IF((ROW()-1)<COUNTA(Sheet1!$B:$B),Sheet1!A2,[switch-over formula])
我们如何告诉它去哪个单元格,因为我们不能使用与Sheet1 相同的方法?我们通过减去 Sheet1 行数,然后加 1(同样,对于标题)来抵消相同类型的相对引用(即 Sheet2!A2)。
=IF((ROW()-1)<COUNTA(Sheet1!$B:$B),Sheet1!A2,OFFSET(Sheet2!A2,-COUNTA(Sheet1!$B:$B)+1,0))
这将添加没有任何空格的表格。
挑战:
0s
如果您填写的公式超过了两个表格的长度——并且您可能想要这样做,所以如果您添加行,您不必更新Sheet3——您将在单元格中得到 0。为防止出现这种情况,您可以检查公式中 Sheet2 中的项目数,如果当前行大于两个工作表中项目的总和,则添加一个空字符串。
=IF((ROW()-1)<COUNTA(Sheet1!$B:$B),Sheet1!A2,IF((ROW()+1)>(COUNTA(Sheet1!$B:$B)+COUNTA(Sheet2!$B:$B)),"",OFFSET(Sheet2!A2,-COUNTA(Sheet1!$B:$B)+1,0)))
性能
如果您的项目总数少于 10,000 个,您可能无需担心性能问题。但是,如果这个列表变得非常大,那么对纸张数量的持续检查将使纸张陷入困境。要解决此问题,请制作另一张表,在其中使用两个单元格计算 Sheet1 和 Sheet2 的计数,然后在 Sheet3 中引用您的公式中的那些。当 Excel 更新依赖关系树时,它们将只计算一次。
排序
使用SMALL 函数在Sheet3 中排序在技术上是可行的,但它可能不值得。如果您真的希望它排序,请使用来自Sheet3 的列的数据透视表。唯一需要注意的是:每次更改数据时,您都需要刷新数据透视表,或者设置一个宏来为您完成。