我的表随着数据刷新而增长的列表如下:
Balham Halfords - P83690
Balham Halfords - P83690
Gloucester & Durham St - P83680
Gloucester & Durham St - P83680
在另一张表中,我希望下拉列表上的数据验证仅显示:
Balham Halfords - P83690
Gloucester & Durham St - P83680
问题是,我不想在书中的任何地方创建一个与表 A 不同的列表,并且我希望数据验证列表能够智能地识别进入表 A 的新记录。
@DasalKalubowila,这是对 @KresimirL 答案的修改,可能就是您正在寻找的内容。
首先,为输入数据创建一个定义的名称。为此,请转至功能区上的公式,然后单击定义名称组下的名称管理器。
在我的示例中,我将输入数据范围称为 InputData。我使用的公式是
=Sheet1!$A$2:INDEX(Sheet1!$A$2:$A$501,MATCH("Ω",Sheet1!$A$2:$A$501))
哪里
Sheet1
是输入数据所在工作表的名称,$A$2
是输入范围内包含数据的第一个单元格(我称之为锚点),$A$2:$A$501
是数据所在列的最大区域,并且将来可能存在,并且"Ω"
是欧米茄字母。您可以通过按住 ALT 并按 10 键数字键盘上的 2,然后按 3,然后按 4 来获取此信息(也可以在 Windows 中的字符映射表应用程序中找到)。此公式根据存在的条目数量有效地扩大或缩小数据范围。
接下来,您需要创建一个辅助列。我知道这不是我们想要的,但这将是唯一/更好的方法之一。我将我的工作表与我的输入数据放在同一个工作表上,但您不必这样做。我在
E2
中使用的公式是
=IFERROR(INDEX(InputData,MATCH(0,COUNTIF($E$1:$E1,InputData),0)),"")
您需要使用 Ctrl+Shift+Enter 来提交,因为它是一个数组公式。然后将该公式尽可能向下拖动。您基本上会想要删除您认为拥有唯一条目的尽可能多的行。
然后,我需要创建一个更多定义的名称,这将在下一步的“数据验证”下使用。我将这个新定义的名称称为ValidationList(这需要限定在工作簿范围内)。我用于 ValidationList 的公式是
=Sheet1!$E$2:INDEX(Sheet1!$E$2:$E$501,COUNTIF(Sheet1!$E$2:$E$501,">*"))
请参阅上面 InputData
的注释以更好地理解此公式。唯一的区别是,此公式使用 MATCH
,而不是
COUNTIF
。这是因为,如果您的唯一值尚未填充整个范围,则您在 Column E
中向下拖动公式(在上一步中),以与之前相同的方式使用 MATCH
最终会抓取一大堆空白我们不想要。 COUNTIF
因此仅计算那些包含大于“*”值的单元格,星号是任何字符的通配符(“”不包含任何字符,因此排除了这些项目)。现在,创建数据验证并进行设置,如下所示: InputData
区域添加信息时,您的 ValidationList 范围应扩展为包含最新的唯一值,而最新的唯一值又将填充到您的 Data Validation 区域中,如下所示: 我发现这似乎并没有显着减慢我的工作簿速度,但我有兴趣听听它在你的工作簿中的表现。