1

我正在尝试修改一个 excel 文件以改进其功能,但不幸的是我对 excel 没有太多经验。

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

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

4

2 回答 2

4

您可以使用数组公式来实现这一点。假设您的数据在列AB工作C表中WS1A1在工作表的单元格中输入以下公式WS2

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

Ctrl使用-确认此公式ShiftEnter表示这是一个数组公式。结果,您会在它周围看到大括号{}

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

然后选择单元格A1B1然后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))),"")

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

一个更有效的解决方案使用辅助列,让我们在 worksheet 上说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))

并选择并向下拖动。

您可以在此处找到上传的示例工作簿

于 2013-03-29T02:35:44.243 回答
1

另一种方法是:在工作表 WS1 的主表左侧创建一个顺序键列,然后使用 WS2 中的 vlookup 仅检索这些行,使用 WS2 上的行号作为查找键。

例如,假设您的数据在 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()))
于 2013-06-09T12:14:12.610 回答