下拉列表中的唯一值

我有两个工作簿,一个源文件和一个输出文件。

源文件包含占用输出文件中某些下拉列表的信息。

对于每个下拉列表,我有两个“名称”(在名称pipe理器)链接到它。 例如,我的输出文件中名称“SchemeID”指的是我的源文件中的同名。 它由多行数据组成,并填充我的下拉列表。

在源文件中有一些重复(例如与相同编号关联的不同名称),这些重复出现在下拉列表中,我想摆脱它们,因此列表仅显示唯一值。 是否有可能使用不同工作簿中的数据来做到这一点?

最简单的方法是去源工作簿,数据function区 – >删除重复。 其他任何事情都需要一对中间的数据表或VBA清理干净。 如果你的数据没有改变,这个手动方法应该没问题。

编辑,因为你似乎限制编辑源文件

在另一张纸上(比方说Sheet2),您将需要一个公式,它将从您的2个源名称中提取所有数据。 据我所知,有没有干净的非VBA的方式来结合命名的范围,所以我们需要通过将数据倾倒到一张表,然后再次拿起它来做到这一点。

有很多方法可以做到这一点,但我会select分解到最大的步骤; 这将是一个相当杂乱的表,但你可以隐藏它,如果你需要,这不应该是一个巨大的关注,因为非VBA方法将需要一个数据转储表反正。

在单元格D1中,我们将在SchemeID中放入行数,如下所示:

=ROWS(SchemeID) 

在单元格D2中,我们将在SchemeID2中放置行数(我假定它是第二个列表的名称,您没有指定):

 =ROWS(SchemeID2) 

在B栏中,我们将从两个指定清单中删除数据,而不sorting或删除重复项。 这样做如下,从A1开始,拖下来(如果你想要标题这有点棘手,所以我会假设没有标题)。

 =IF(ROW()<=$D$1,INDEX(SchemeID,ROW()),INDEX(SchemeID2,ROW()-$D$1) 

这就是说 – 如果该行不超过SchemeID中的总数,那么从当前行#处的SchemeID中取出该值。 否则,从SchemeID2,在当前行#中减去SchemeID中的总行(如果我们在第10行,但SchemeID在行4结束,则行10将从SchemeID2中拉第6个条目)。

现在在A列中,我们将检查哪一行是重复的,如下A2开始[A1硬编码为1]:

 =IF(ISERROR(MATCH(B2,$B$1:B1,0)),A1+1,A1) 

这将检查当前行上方的行中是否存在B列当前值的重复。 如果存在,则保持与上面的行相同的索引号(当我们将其用作下一个索引键时将被忽略)。 如果没有重复,则将索引号加1。

在单元格D3中,input以下公式来跟踪有多less个唯一ID:

 =MAX(A:A) 

接下来,在列C中,把你的新列表从B列中拉出来,以获得与[拖下]一样多的唯一值:

 =VLOOKUP(ROW(),A:B,0) 

这是你的新的非重复列表。 要对其进行干净的引用,请使用以下公式创build一个新的命名范围:

 =INDIRECT("'Sheet2!R1C3:R"&'Sheet2!$D$3&"C3", FALSE) 

这将简化为[假设列C中的20行数据,基于D3所说的]:

 ='Sheet2!R1C3:R20C3' 

其中,在R1C1的参考方法中,意思是Sheet2!C1:C20。

这个新的命名范围应该是您的下拉列表在其他标签上引用的内容。