2017-06-03 56 views
0

我收到了一個有3列的電子表格。這些是名稱,年齡,值動態下拉列表 - 返回值

我想根據「名稱」列中的唯一值創建一個incell下拉列表。例如,「姓名」列中可能有兩個單元格,其中包含「John」。即副本

當在下拉列表中選擇「John」時,我想創建另一個動態創建的下拉菜單,僅顯示條目的年齡。例如,如果在名稱列中有兩行帶有「John」,那麼另一個下拉列表應僅顯示這些行的年齡值。基於兩個選擇id喜歡顯示值列中的任何內容。

您認爲我需要使用宏來實現嗎?

使事情複雜化,列表中的行數可能隨時間而改變,因此需要刪除空白名稱。創建incell下拉菜單時的'忽略空白'不做任何事情,它們仍然顯示在列表中。

任何意見,將不勝感激。

+0

您能否詳細說明 - 「如果在名稱列中有兩行帶有」John「,那麼其他下拉列表應僅顯示這些年齡值中的每一個」 –

+0

在「名稱」列中可能有兩個單元格行)重複條目。在這篇文章中,我舉了一個「約翰」的例子。 – Andrew

+0

仍然沒有得到它 –

回答

1

根據您的描述,我認爲您正在創建列表驗證的下拉單元格。列表可以是初始數據庫的子集。這樣的數據庫的一個例子可能看起來像:

Initial List

相鄰像驗證下拉菜單:

With Drop Downs

這可以通過幾個步驟來實現。

1)創建所有在助手列的唯一名稱的子集,我會爲此在J.

=IFERROR(IF(NOT(INDEX($A$2:$A$20,MATCH(0,INDEX(COUNTIF($J$1:J1,$A$2:$A$20),0,0),0))=""),INDEX($A$2:$A$20,MATCH(0,INDEX(COUNTIF($J$1:J1,$A$2:$A$20),0,0),0)),NA()),"") 

我的唯一身份測試範圍只延伸到A20,但你可以儘可能採取這一點。

2)由於您正在使用用戶必須選擇的驗證列表進行此操作,因此您應該將其按字母順序排列。我這樣做在旁邊一列K.

=IFERROR(INDEX(INDIRECT("J1:J"&SUMPRODUCT(--(LEN(J:J)>0))+1),MATCH(ROWS($J$2:J2),COUNTIF(INDIRECT("J1:J"&SUMPRODUCT(--(LEN(J:J)>0))+1),"<="&INDIRECT("J1:J"&SUMPRODUCT(--(LEN(J:J)>0))+1)),0)),"") 

這個公式是數組公式,必須以CTRL + SHIFT +第一個單元格中輸入,然後你可以向下填充輸入。在附近的單元格中,讓我們跟蹤用於創建按字母順序的列表(無空格)的有意義名稱佔用的完整範圍。輸入以下命令:

="K2:K"&SUMPRODUCT(--(LEN(J:J)>0))+1 

注意,這是假設我的唯一身份用戶都在列J.如果你把它們放在別的地方,你需要對此進行修改。

3)在這一點上,我們可以使我們的第一個驗證的下拉菜單。我使用的是Excel 2016,所以我選擇我想要下拉的單元格(在我的例子中是E2),然後進入數據 - >驗證。在此我選擇允許:列表;和來源:我輸入以下內容:

=INDIRECT($K$1) 

由於K1是我跟蹤有用和按字母順序的唯一身份的範圍的單元格。例如:Validation

現在回到主表上,我有一個E2列表中的下拉列表。接下來讓我們構建有用年齡的子集。

4)在一個新的輔助範圍(我 'M2:M10')輸入以下內容:

=IFERROR(SUM(LARGE(IF(($A$2:$A$20=$E$2)*ROW($A$2:$A$20),$B$2:$B$20,""),COUNTIF($A$2:$A$20,"="&$E$2)-ROW()+ROW($M$2))),"") 

這是另一種陣列式,並且必須以CTRL + SHIFT +輸入提交,但與其他數組公式相比,您必須一次輸入整個範圍內的數據,因爲我知道我不會超過幾年。如果你懷疑你會有更多的這個範圍。

與名稱允許跟蹤附近單元格中有用年齡段的範圍相同(我選擇了N1)。

="M2:M"&COUNTIF((M:M),">0")+1 

5)使下一個驗證下拉。選擇一個單元(我拿起F2),並再次數據 - >驗證,選擇列表和現在使用的年齡來源:

=INDIRECT($N$1) 

6)獲取對應於與個體年齡的價值現在很容易。在接下來的單元格輸入:

=SUM(IF((A2:A20=E2)*(B2:B20=F2),C2:C20)) 

你有它。什麼我完成的板材看起來像一個例子是在這裏:

Completely Functional

最後一件事就更不用說了。當你這樣做並切換到新名稱時,它不會自動重置年齡下拉菜單。所以爲了使這個顯示重置,你可以使用一些聰明的條件格式。我格式化F2 & G2以下的規則,並設置字體顏色爲白色:

Conditional Format

因此,儘管在每個這些細胞的值不會重置當一個下拉具有更高的優先級改變它出現消除強迫用戶從下拉選擇新時代。

祝你好運!

+0

非常感謝。由於某些奇怪的原因,從第一列獲得獨特的工作正常,但我不能得到第二個工作。只是最後做了一個靜態下拉列表,幫助列,vlookup和條件格式,如果沒有找到值。 – Andrew

+0

這段代碼很慢。任何加速它的方式?我很樂意使用宏 – Andrew