在一千个列表中查找重复项

时间:2018-01-16 22:12:17

标签: excel excel-vba vba

我有1,100多个列表,每个列表中包含的项目不超过30个。我试图查看列表中是否有任何项目出现在所有列表中。我最初认为我需要将列A中的列表与列B中的列表进行比较,存储重复项,然后将重复项与列C中的列表进行比较,存储新的重复项,将新的重复项与列表中的重复项进行比较D列,依此类推,直到所有列表都被覆盖。

我的问题是: 1.)这是接近这个的正确方法吗? 2.)如果是这样,是否有一个简单的VBA代码可用于执行此操作?

3 个答案:

答案 0 :(得分:2)

  1. 使用Data>对每个列表进行重复数据删除Remove Duplicates
  2. 将所有列表整理成一个长列表
  3. 使用项目列作为行维度
  4. 创建数据透视表
  5. 使用与数据透视表中显示的值相同的列,并使用Count。
  6. 进行汇总
  7. 按照该计数的降序对数据透视表进行排序。
  8. 计数显示每个项目出现的列表数。如果任何计数为1100,那么它们必须出现在每个列表中。

答案 1 :(得分:0)

这是我对这个有趣问题的非VBA解决方案。计划是搜索任何一个列表中的每个项目,并与表格中的所有其他列表进行比较。

首先在表格的左侧插入一个新的“A”列。复制任何列表并粘贴到A35。

  • 如果您的目标只是查找所有列表中的项目,请选择最小的列表。
  • 如果您想分析,请选择最大的列表甚至多个列表。
  • 您可以通过复制/粘贴将整个表格复制/粘贴到新工作表中来包含所有项目。然后你有不到30个colums。将每个粘贴到一个列中并使用数据删除此列表的副本 - >删除重复项。

现在需要在单元格B35中创建一个公式,在B1:B30范围内搜索A35中的字符串。您可以将公式一直向下拖动。

=COUNTIF(B$1:B$30,$A30)

结果将是每个列表中找到的每个项目的计数。为了查看是否有任何项目在所有列表中,特定行中的所有列应至少计算1个项目。在结果的右侧,查看行中的最小值:

=MIN(B35:API35)

(假设您的表以列API结尾)

如果您的任何行的最小值为1,则该项目将包含在所有列表中。

然后,您还可以总结该行以查看哪些项目发生最多,您可以使用“max”而不是“min”来查看是否有任何列表重复。

答案 2 :(得分:0)

请尝试使用此Duplicate value in excel 如果它不起作用,我可以帮助您使用Macro VB代码 逻辑如下:
1.将第1列作为基础,检查所有其他列 2.检查第一列的每个30个细胞与所有其他柱细胞的循环 3.如果您没有整列中的值,请停止循环。