Excel创build数据validationdynamic下拉列表的唯一项目,不包含新列

我的表在数据刷新上增长的列表如下:

Balham Halfords - P83690 Balham Halfords - P83690 Gloucester & Durham St - P83680 Gloucester & Durham St - P83680 

在另一张表中,我希望在下拉列表中只显示数据validation:

 Balham Halfords - P83690 Gloucester & Durham St - P83680 

麻烦的是,我不希望在本书的任何地方创build一个与表A不同的清单,而且我希望数据validation列表能够对进入表A的新logging进行智能化处理。

如果要使用公式的Helper列方法,请尝试此解决scheme。

如果您的数据在列A中,则input以下公式=IFERROR(INDEX($A$2:$A$900, MATCH(0,COUNTIF($D$1:D1, $A$2:$A$900), 0)),"")单元格D2并拖动它,只要你估计会有不同的值。 您必须使用CTRL + SHIFT + ENTER来input它,因为它是一个数组公式。

在这里输入图像说明

然后使用数据validation,select列表并在源下input这个公式=OFFSET(D2,0,0,198-COUNTBLANK(D2:D200),1)

在这里输入图像说明

现在每当将新值添加到表中时,它们也会自动添加到您的数据validation列表中。 在这里输入图像说明

@DasalKalubowila,这里是对@ KresimirL的答案,可能是你要找的修改。

首先,为您的input数据创build一个定义的名称。 通过转到function区上的公式 ,然后单击“定义的名称”组下的“ 名称pipe理器”来执行此操作。

在我的例子中,我调用了input数据范围InputData 。 我使用的公式是

=Sheet1!$A$2:INDEX(Sheet1!$A$2:$A$501,MATCH("Ω",Sheet1!$A$2:$A$501))

哪里

  • Sheet1是input数据所在工作表的名称,

  • $A$2是你的input范围中的第一个包含数据的单元格(我称之为锚点),

  • $A$2:$A$501是您的数据所在的列的最大面积,可能会在将来生活,

  • "Ω"是欧米茄字母。 您可以通过按住ALT键 ,然后按10键数字键盘上的2键, 3键和4键(也可以在Windows中的字符映射应用程序中find此键盘)来获得此function。

此公式可根据存在的条目有效地增加或缩小您的数据范围。

接下来,您需要创build一个帮助列。 我知道这是不希望的,但它将是唯一/更好的方法之一。 我将它放在与我的input数据相同的工作表上,但是您不必这样做。 我在E2中使用的公式是

=IFERROR(INDEX(InputData,MATCH(0,COUNTIF($E$1:$E1,InputData),0)),"")

你需要用Ctrl + Shift + Enter来提交,因为它是一个数组公式。 然后将这个公式向下拖到你的位置。 你基本上想要沿着你认为你会有独特的条目行数。

然后,我需要创build一个更多的定义的名称,这将是我的数据validation在下一步使用。 我调用了这个新定义的名称ValidationList (这需要将范围限定在Workbook中)。 我用于ValidationList的公式是

=Sheet1!$E$2:INDEX(Sheet1!$E$2:$E$501,COUNTIF(Sheet1!$E$2:$E$501,">*"))

请参阅上面的InputData注释以更好地理解此公式。 唯一的区别是,而不是MATCH ,这个公式使用COUNTIF 。 这是因为如果你的唯一值还没有填满整个范围,那么你在Column E (在前面的步骤)中拖动你的公式,使用MATCH以同样的方式之前将最终抓住一大堆空白,不想要。 因此, COUNTIF只计算那些包含大于“*”值的单元格,星号是任何字符的通配符(“”不包含字符,所以不包括这些项目)。

现在,创build您的数据validation,并像这样设置: 数据验证示例

现在你应该留下这个: 数据验证之前额外的条目

当你将信息添加到你的InputData区域时,你的ValidationList范围应该扩展到包含最新的唯一标识符,这个唯一标识符将会填充到你的Data Validation区域,如下所示: 数据验证后,额外的条目

我发现这似乎并没有使我的工作簿过于缓慢,但我有兴趣知道它是如何在你的performance。