根據您的描述,我認爲您正在創建列表驗證的下拉單元格。列表可以是初始數據庫的子集。這樣的數據庫的一個例子可能看起來像:
相鄰像驗證下拉菜單:
這可以通過幾個步驟來實現。
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是我跟蹤有用和按字母順序的唯一身份的範圍的單元格。例如:
現在回到主表上,我有一個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))
你有它。什麼我完成的板材看起來像一個例子是在這裏:
最後一件事就更不用說了。當你這樣做並切換到新名稱時,它不會自動重置年齡下拉菜單。所以爲了使這個顯示重置,你可以使用一些聰明的條件格式。我格式化F2 & G2以下的規則,並設置字體顏色爲白色:
因此,儘管在每個這些細胞的值不會重置當一個下拉具有更高的優先級改變它出現消除強迫用戶從下拉選擇新時代。
祝你好運!
您能否詳細說明 - 「如果在名稱列中有兩行帶有」John「,那麼其他下拉列表應僅顯示這些年齡值中的每一個」 –
在「名稱」列中可能有兩個單元格行)重複條目。在這篇文章中,我舉了一個「約翰」的例子。 – Andrew
仍然沒有得到它 –