下拉列表中的唯一值

时间:2015-08-27 14:54:06

标签: excel

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

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

对于每个下拉列表,我有两个名字' (在名称管理器中)链接到它。例如,名称' SchemeID'在我的输出文件中引用我的源文件中的相同名称。它由几行/每列数据组成,并填充我的下拉列表。

源文件中有一些重复(例如,与相同数字相关联的不同名称)出现在下拉列表中,我想摆脱它们,因此列表只显示唯一值。是否可以使用来自不同工作簿的数据来执行此操作?

1 个答案:

答案 0 :(得分:1)

最简单的方法是转到源工作簿,数据功能区 - >删除重复项。其他任何东西都需要一些中间数据表或VBA才能干净利落。如果您的数据没有更改选项,则此手动方法应该没问题。

编辑,因为您似乎无法编辑源文件

在另一张表格中(让我们说Sheet2),您需要一个公式,从您的2个来源名称中提取所有数据。据我所知,没有干净的非VBA方式与命名范围相结合,因此我们需要通过将数据转储到工作表,然后再将其重新拾取来完成此操作。

有很多方法可以做到这一点,但我会选择分解到最多步骤的那个;这将是一个相当混乱的表,但你可以隐藏它,如果你需要,这不应该是一个巨大的问题,因为非VBA方法无论如何都需要数据转储表。

在Cell D1中,我们将把行数放在SchemeID中,如下所示:

=ROWS(SchemeID)

在Cell D2中,我们将把行数放在SchemeID2中(我假设这是第二个列表的名称,你没有指定):

=ROWS(SchemeID2)

在B列中,我们将从两个命名列表中转储数据,而不会排序或消除重复项。这样做如下,从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中,输入以下公式来跟踪有多少个唯一ID:

=MAX(A:A)

接下来,在C列中,添加新列表,从列B中提取与[向下拖动]一样多的唯一值:

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

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

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

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

='Sheet2!R1C3:R20C3'

在R1C1参考方法中,表示Sheet2!C1:C20。

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