我正在尝试修改一个 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 功能/技术来实现此功能吗?谢谢
您可以使用数组公式来实现这一点。假设您的数据在列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,Enter表示这是一个数组公式。结果,您会在它周围看到大括号{}
。
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))),"")
如果调整了on列中的值,则工作表上列的内容WS2
会自动更新。A
WS1
一个更有效的解决方案使用辅助列,让我们在 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))
并选择并向下拖动。
您可以在此处找到上传的示例工作簿
另一种方法是:在工作表 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()))