2013-03-27 69 views
1

我想修改一个excel文件来改进它的功能,但不幸的是我没有太多的excel经验。如何创建工作表的动态视图(过滤器)?

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

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

回答

4

您可以使用数组公式实现此目的。假设您的数据在工作表WS1的列ABC中。在细胞A1上工作表WS2输入以下公式:

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

确认使用Ctrl键该式 - - 输入,表明这是一个数组公式。因此,你会在它周围看到大括号{}

同样,进入工作表上WS2细胞B1C1以下数组公式:

=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))) 

然后选择单元格A1B1C1表上WS2并尽量向下拖动右下角一路根据需要包含所有行。请注意,如果你拖得太远,你会看到#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))),"") 

列的工作表上的内容,如果对WS1A列值调整WS2得到自动更新。

一个更有效的解决方案使用帮助列,可以在工作表WS3上说。它首先计算用下面的公式中的相关行的索引(如在A1阵列式):

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

然后在B1C1D1(正常,非阵列式)进入下面的公式:

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

并选择并向下拖动。

你可以找到这样的上传example workbook here

+0

谢谢你,这正是我需要的! – carlo 2013-03-29 06:25:10

1

另一种方法:创建一个连续的键列于表WS1主表的左侧,然后使用VLOOKUP在WS2只检索那些行,使用行编号在WS2上作为查找键。

E.g.假设您的数据位于WS1!C2:D8中,并且您只需要列D中值为“a”的行。然后在B2以下,和向下粘贴到B2:B8:

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

然后在A2以下,贴向下进入A2:A8:

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

最后,在输入此公式!WS2 A1和整个粘贴,下尽可能必要(为安全起见,只要你的原表中WS1去):

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