我在工作表 1 中有一个 ID 和说明的列表。然后,该数据用于用户可以与之交互的第二张工作表(工作表 2)。
Sheet 1 中的列表具有重复的 ID,但描述不同。我如何才能使用 Sheet 2 中的数据验证将 ID 号 4 的所有重复项合并为 1,但允许用户在 A 列中进行选择后选择他们想要的描述(使用下拉框)?
为此,我想远离宏 - 只使用内置函数。
任何帮助都将不胜感激!
答案1
合并 Sheet1 中的重复项。查找公式仅返回找到的第一个值,因此如果您有多个相同的 ID,则需要创建一个具有唯一 ID 的查找。如果您不想或无法更改原始表,请在辅助表中准备该表并使用辅助表进行数据验证。
标识符(这样称呼是有原因的)不是唯一的,这很容易引起误导。
答案2
您没有提到您使用的 Excel 版本。根据我对您问题的理解,我建议您采用一种可能的解决方案。但是,它还使用了名为 IFERROR 和 COUNTBLANK 的函数,我猜这些函数在 Excel 2007 之前不可用。因此,如果您使用的是 Excel 2003,则可能需要采用不同的方法。
这可能不是一个非常理想的解决方案,因为它使用辅助列和辅助表!
在此示例中,示例数据位于 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。SHIFTENTER
现在转到名称管理器并创建一个名为 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 说明列中获取所需的说明。