如何创建工作表的动态视图(过滤器)?

时间:2013-03-27 18:27:41

标签: excel

我正在尝试修改excel文件以改进其功能,但遗憾的是我对excel没有多少经验。

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

我可以使用标准的Excel功能/技术实现此功能吗? 感谢

2 个答案:

答案 0 :(得分:4)

您可以使用数组公式实现此目的。假设您的数据位于工作表A中的BCWS1列中。在工作表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 - Shift - 输入确认此公式,以指示这是一个数组公式。因此,您将在其周围看到大括号{}

同样,在工作表B1上的单元格C1WS2中输入以下数组公式:

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

然后在工作表A1上选择单元格B1C1WS2,并将所有向下拖动右下角尽可能包含所有行。请注意,如果向下拖动太远,您会看到#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))),"")

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

一个更高效的解决方案使用帮助列,比方说工作表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

答案 1 :(得分:1)

另一种方法:在表WS1中创建主表左侧的顺序键列,然后使用WS2中的vlookup仅使用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()))