我想修改一個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函數/技術來實現這個功能嗎? 謝謝
您可以使用數組公式實現此目的。假設您的數據在工作表WS1
的列A
,B
和C
中。在細胞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
細胞B1
和C1
以下數組公式:
=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))),"")
列的工作表上的內容,如果對WS1
在A
列值調整WS2
得到自動更新。
一個更有效的解決方案使用幫助列,可以在工作表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
另一種方法:創建一個連續的鍵列於表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()))
謝謝你,這正是我需要的! – carlo 2013-03-29 06:25:10