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。