我在工作表 1 中有一個 ID 和描述清單。
表 1 中的列表具有重複的 ID,但具有不同的描述。我如何能夠使用表 2 中的資料驗證將 ID 號碼 4 的所有重複合併為 1,但在 A 列中進行選擇後允許使用者選擇他們想要的描述(使用下拉方塊) ?
為此,我想遠離巨集 - 僅使用內建函數。
任何幫助表示讚賞!
答案1
合併 Sheet1 中的重複項。尋找公式僅傳回第一個找到的值,因此如果您有多個相同 ID,則需要使用唯一 ID 建立查找。如果您不想或無法變更原始表,請在輔助表中準備該資料並使用輔助表進行資料驗證。
識別符(之所以這樣稱呼是有原因的)不是唯一的,這是相當具有誤導性的。
答案2
您沒有提到您正在使用的 Excel 版本。我根據我對你的問題的理解提出了一個可能的解決方案。不過,它也使用了名為 IFERROR 和 COUNTBLANK 的函數,我認為這些函數在 Excel 2007 之前不可用。
這可能不是非常理想的解決方案,因為它使用輔助列和輔助表!
在此範例中,範例資料位於 Sheet1!A2:B10 中,如該螢幕截圖所示。
首先,我們需要在 D 列中建立輔助列,以從您的 ID 中取得唯一清單。
在 D2 中輸入以下公式,然後按公式欄中的CTRL+ SHIFT+ENTER建立陣列公式。您還需要保留一行(最好是第一行)作為標題才能正常工作。
該公式應括在大括號中以表示它是數組公式。
根據主列中唯一值的預期計數,將其向下拖曳到預期的行。最終它會開始在底部返回空白,然後你就可以停止了。這將建立一個唯一的 ID 主清單。
=IFERROR(INDEX($A$2:$A$10, MATCH(0,COUNTIF($D$1:D1, $A$2:$A$10), 0)),"")
現在我們需要知道該清單的確切開始和結束位置來填充驗證清單。
現在在 G3 中輸入以下公式。
=INDEX(Sheet1!D2:D10,1)
並在 G4 中輸入以下數組公式。
=MIN(IF(Sheet1!D2:D10="",ROW(Sheet1!D2:D10),9^99))-2
不要忘記這個的CTRL+ SHIFT+ 。ENTER
現在轉到名稱管理器並建立一個名為 MyList 的新名稱
將以下公式代入其中
=INDEX(Sheet1!$D$2:$D$10,Sheet1!$G$3):INDEX(Sheet1!$D$2:$D$10,Sheet1!$G$4)
這裡我們使用 INDEX 回傳單元格引用而不是值
插入一個名為 Sheet2 的新工作表。
現在,在 A2 欄及下方建立驗證清單並將其放入=MyList
其中。
第 1 部分就完成了。
現在,下一個任務是根據從描述列中提取的資料填入第二個驗證清單。
插入第三個輔助表,稱為 Sheet3。您可以簡單地隱藏此工作表。
在此範例中,我在 Sheet3!B2:H10 中取得了資料。根據主列表中 ID 的最大重複數來決定列數。還要保留第一列 A 才能正常運作。
在 B2 中輸入以下公式,然後按公式欄中的CTRL+ SHIFT+ENTER建立陣列公式。
按照預期將其向下拖曳到上方和下方。
=IFERROR(INDEX(Sheet1!$B$2:$B$10, SMALL(IF(Sheet2!$A2=Sheet1!$A$2:$A$10,ROW(Sheet1!$A$2:$A$10)-1,999),COLUMN()-COLUMN($A$2))),"")
傳回名稱管理器,建立一個名為 Trimmed 的新名稱,並在其中輸入以下公式。
=OFFSET(Sheet3!$B1,0,0):OFFSET(Sheet3!$B1,0,COUNTA(Sheet3!$B1:$H1)-COUNTBLANK(Sheet3!$B1:$H1)-1)
這會產生一個排除空白的列表,以便正確修剪該列表。
現在,在 Sheet2 的儲存格 B2 及下方建立驗證清單並將其放入=Trimmed
其中。
現在,當 Sheet1!A2:A10 中的資料發生變更時,唯一值清單會自動反映在 MyList 中,然後名稱 Trimmed 將僅從 Sheet1 描述列中取得預期的描述。