我正在尝试修改excel文件以改进其功能,但遗憾的是我对excel没有多少经验。
为了解释我的问题,假设我有2个工作表:WS1和WS2。 WS1包含用户输入的所有数据。第一列包含整数。 我希望WS2包含WS1的动态视图。特别是WS2应该包含 WS1中第一列包含“1”的所有行。每次更新WS1时,WS2的内容都应自动更改。
我可以使用标准的Excel功能/技术实现此功能吗? 感谢
答案 0 :(得分:4)
您可以使用数组公式实现此目的。假设您的数据位于工作表A
中的B
,C
和WS1
列中。在工作表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
上的单元格C1
和WS2
中输入以下数组公式:
=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))),"")
如果调整了WS2
上A
列中的值,则工作表WS1
上的列内容会自动更新。
一个更高效的解决方案使用帮助列,比方说工作表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
答案 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()))