我如何创build一个工作表的dynamic视图(filter)?
我试图修改一个Excel文件,以改善其function,但不幸的是我没有太多的经验与Excel。
为了解释我的问题,假设我有两个工作表:WS1和WS2。 WS1包含用户input的所有数据。 第一列包含整数。 我想WS2包含WS1的dynamic视图。 特别是WS2应该包含WS1中第一列包含“1”的所有行。 每次WS1更新时,WS2的内容都应该自动更改。
我可以用标准的Excel函数/技术来实现这个function吗? 谢谢
你可以使用数组公式来实现这一点。 假设你的数据在工作表WS1
列A
, B
和C
中。 在工作表WS2
单元格A1
input以下公式:
=INDEX('WS1'!$A:$A,SMALL(IF('WS1'!$A:$A=1,ROW(INDIRECT("1:"&COUNTA('WS1'!A:A)))),ROWS('WS1'!$A$1:$A1)))
使用Ctrl – Shift – Enter确认此公式,表示这是一个数组公式。 因此,您将在其周围看到大括号{}
。
同样,在工作表WS2
单元格B1
和C1
input以下数组公式:
=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
上的单元格A1
, B1
和C1
,并尽可能拖拽右下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)),"")
然后在B1
, C1
和D1
(常规,而不是数组公式)中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()))