我想修改一个excel文件来改进它的功能,但不幸的是我没有太多的excel经验。如何创建工作表的动态视图(过滤器)?
为了解释我的问题,假设我有2个工作表:WS1和WS2。 WS1包含用户输入的所有数据。第一列包含整数。 我想WS2包含WS1的动态视图。特别是WS2应该包含 WS1中第一列包含“1”的所有行。每次WS1更新时,WS2的内容都应该自动更改。
我可以用标准的excel函数/技术来实现这个功能吗? 谢谢
我想修改一个excel文件来改进它的功能,但不幸的是我没有太多的excel经验。如何创建工作表的动态视图(过滤器)?
为了解释我的问题,假设我有2个工作表:WS1和WS2。 WS1包含用户输入的所有数据。第一列包含整数。 我想WS2包含WS1的动态视图。特别是WS2应该包含 WS1中第一列包含“1”的所有行。每次WS1更新时,WS2的内容都应该自动更改。
我可以用标准的excel函数/技术来实现这个功能吗? 谢谢
您可以使用数组公式实现此目的。假设您的数据在工作表WS1
的列A
,B
和C
中。在细胞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
细胞B1
和C1
以下数组公式:
=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
,B1
和C1
表上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))),"")
列的工作表上的内容,如果对WS1
在A
列值调整WS2
得到自动更新。
一个更有效的解决方案使用帮助列,可以在工作表WS3
上说。它首先计算用下面的公式中的相关行的索引(如在A1
阵列式):
=IFERROR(SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)),"")
然后在B1
,C1
和D1
(正常,非阵列式)进入下面的公式:
=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
另一种方法:创建一个连续的键列于表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()))
谢谢你,这正是我需要的! – carlo 2013-03-29 06:25:10