我如何创build一个工作表的dynamic视图(filter)?

我试图修改一个Excel文件,以改善其function,但不幸的是我没有太多的经验与Excel。

为了解释我的问题,假设我有两个工作表:WS1和WS2。 WS1包含用户input的所有数据。 第一列包含整数。 我想WS2包含WS1的dynamic视图。 特别是WS2应该包含WS1中第一列包含“1”的所有行。 每次WS1更新时,WS2的内容都应该自动更改。

我可以用标准的Excel函数/技术来实现这个function吗? 谢谢

你可以使用数组公式来实现这一点。 假设你的数据在工作表WS1ABC中。 在工作表WS2单元格A1input以下公式:

 =INDEX('WS1'!$A:$A,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1))) 

使用CtrlShiftEnter确认此公式,表示这是一个数组公式。 因此,您将在其周围看到大括号{}

同样,在工作表WS2单元格B1C1input以下数组公式:

 =INDEX('WS1'!$B:$B,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1))) =INDEX('WS1'!$C:$C,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1))) 

然后select工作表WS2上的单元格A1B1C1 ,并尽可能拖拽右下angular以包含所有行。 请注意,如果你拖得太远,你会看到#NUM 。 为避免这种情况,请将公式包含在IFERROR()公式中(对于Excel 2007及更高版本),如下所示

 =IFERROR(INDEX('WS1'!$A:$A,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1))),"") 

如果调整WS1上的列A值,则工作表WS2上的列的内容会自动更新。

一个更有效的解决scheme使用一个帮助列,让工作表WS3上说。 它首先使用下面的公式(作为A1的数组公式)计算相关行的索引:

 =IFERROR(SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)),"") 

然后在B1C1D1 (常规,而不是数组公式)中input以下公式:

 =IF(ISBLANK($A1),"",INDEX('WS1'!$A:$A,$A1)) =IF(ISBLANK($A1),"",INDEX('WS1'!$B:$B,$A1)) =IF(ISBLANK($A1),"",INDEX('WS1'!$C:$C,$A1)) 

并select并向下拖动。

你可以在这里find一个上传的示例工作簿

另一种方法是:在工作表WS1的主表左侧创build一个顺序键列,然后在WS2中使用vlookup仅检索那些行,使用WS2上的行号作为查找键。

例如,假设你的数据在WS1!C2:D8中,而你只需要列D的值为“a”的行。 然后在B2中input以下内容,并粘贴到B2:B8:

 =IF(D2="a",ROW(),"") 

然后在A2中input以下内容,并粘贴到A2:A8:

 =IF(B2="","",RANK(B2,$B$2:$B$8,-1)) 

最后,在WS2!A1中input这个公式,并且尽可能地粘贴到底(尽可能保证安全,就像WS1中的原始表一样):

 =IF(ROW() > MAX(Sheet1!$A$2:$A$8),"",VLOOKUP(ROW(),Sheet1!$A$2:$D$8,COLUMN()))