2013-03-27 66 views
1

我想修改一個excel文件來改進它的功能,但不幸的是我沒有太多的excel經驗。如何創建工作表的動態視圖(過濾器)?

爲了解釋我的問題,假設我有2個工作表:WS1和WS2。 WS1包含用戶輸入的所有數據。第一列包含整數。 我想WS2包含WS1的動態視圖。特別是WS2應該包含 WS1中第一列包含「1」的所有行。每次WS1更新時,WS2的內容都應該自動更改。

我可以用標準的excel函數/技術來實現這個功能嗎? 謝謝

回答

4

您可以使用數組公式實現此目的。假設您的數據在工作表WS1的列ABC中。在細胞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細胞B1C1以下數組公式:

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

然後選擇單元格A1B1C1表上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))),"") 

列的工作表上的內容,如果對WS1A列值調整WS2得到自動更新。

一個更有效的解決方案使用幫助列,可以在工作表WS3上說。它首先計算用下面的公式中的相關行的索引(如在A1陣列式):

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

然後在B1C1D1(正常,非陣列式)進入下面的公式:

=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

+0

謝謝你,這正是我需要的! – carlo 2013-03-29 06:25:10

1

另一種方法:創建一個連續的鍵列於表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()))