【问题标题】:VBA - Remove duplicates which contain less informationVBA - 删除包含较少信息的重复项
【发布时间】:2020-08-03 08:03:43
【问题描述】:

关于 Stack 的第一个问题,但不是我第一次访问!

基本上我有这个庞大的 Excel 数据库(>24 000 行,从不同的表合并)我已经工作了几个星期,现在我已经完成了添加新条目,我必须通过删除大量重复项来清理它.

数组/表的结构如下:

+---------+-------+--------------------+-------------+--------------------+
| Company | Name  |       Address      |  Phone      |       Email        |
+---------+-------+--------------------+-------------+-----------+--------+
| Baij&Co | Steve | 458 Preston avenue |  4156854789 |  steve@baij&co.com |

我确实搜索过常规方法,但它们并不能完全回答我的问题,例如:

  • 使用“删除重复项”Excel 按钮,选择所有列以确保我只保留唯一值
  • 使用过滤方法识别重复项,然后将其删除。

但是,我的目标是删除给定行包含最少信息的重复项,如下例所示:

+--------- +-------+--------------------+-------------+--------------------+
| Company  | Name  |       Address      |  Phone      |       Email        |
+--------- +-------+--------------------+-------------+--------------------+
| Baij&Co  | Steve |     (blank)        |  4156854789 |  steve@baij&co.com |
| Baij&Co  | Steve |     (blank)        |  (blank)    |  steve@baij&co.com |
| Baij&Co  | Steve | 458 Preston avenue |  4156854789 |  steve@baij&co.com |

在这里,我想删除第一行和第二行,因为它们包含的关于同一联系人的信息较少(缺少地址和电话条目)。 这有意义吗..?

我只知道 VBA 的基础知识(例如创建用户表单以添加新联系人并在正确的单元格中填写输入的信息),但我对高级算法感到很困惑。

我只知道 VBA 相关功能无法自定义,除了选择我要删除重复的列:

Sheets("Database").Range("ContactsTable").RemoveDuplicates Columns:=1:15, Header:=xlNo

有什么想法吗?

【问题讨论】:

  • 先对数据进行排序,让空白排到底部,然后只选择一两列来测试重复项。
  • 您可以添加一列,计算为每个联系人填充了多少个单元格,然后按联系人和计数(降序)排序,然后删除联系人的重复数据。

标签: excel vba duplicates conditional-statements


【解决方案1】:

谢谢各位!

所以我遵循了@Tim Williams 的建议(实际上与 Scott 的建议类似)并做了以下事情:

  • 我意识到电子邮件地址是唯一标识符(或主键),我必须删除不包含任何标识符的行(因为没有联系信息的联系文件毫无用处)。

  • 我添加了一个名为“计数”的列并插入了以下公式:

    =COUNTIF(N:N; N2)

--> 这里,“N:N”是包含所有电子邮件地址的列。 “N2”是第一个单元格。

  • 然后我按新的“计数”列的降序对表格进行排序,以使出现次数最多的列在前。

  • 然后使用“删除重复”Excel工具并选择电子邮件地址列。

因此,已删除 10 000 行(共 24 000 行)。可以肯定的是,此表现在包含基于电子邮件地址的唯一联系人文件。但是,我永远无法确定是否为每个联系人保留了最填充的行(除非我花费数天时间逐行比较两个数据库)。

我猜问题解决了!虽然如果有人知道的话,我会对 VBA 脚本做同样的事情(学习算法方面)感兴趣:-)

再次感谢!

【讨论】:

    猜你喜欢
    • 2015-03-11
    • 2021-06-20
    • 2021-06-19
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多