如何在不同情况下删除Excel中的重复项(VBA)?

2023-12-30

我需要将相应的值汇总到右侧的列中,但也需要删除重复项。这是交易:

例如,如果我有从 A 到 F 的列。如果 A 到 E 列与另一行相同,则宏将删除该行并保存旧行。 如果 A 至 C 列与另一现有行相同,宏将删除另一行并将 D 和 E 列中的相应值添加到剩余行。这是一个例子:

cell1 cell2 cell3 cell4 cell5 cell6
1      1     1     1     1     1
2      2     2     2     2     2
2      2     2     2     2     2
1      1     1     2     2     1
3      3     3     3     3     3

After macro:

cell1  cell2 cell3 cell4 cell5 cell6
1      1     1      3     3     1 
2      2     2      2     2     2
3      3     3      3     3     3 

现在,宏已删除第 4 行(因为它在 A 列到 C 列上的值与第 1 行相同),并将 D 列和 E 列中的相应值添加到第 1 行。此外,第 2 行和第 3 行是从 A 列到 E 列的重复项,因此宏删除第 3 行。

这是我尝试过的一个例子(我之前得到了有关求和问题的帮助(来自@JvdV)并将相应的值添加到正确的值中,但我不知道如何正确删除重复项..)

类模块:

Public Col1 As Variant
Public Col2 As Variant
Public Col3 As Variant
Public Col4 As Variant
Public Col5 As Variant
Public Col6 As Variant

Module:

Dim x As Long, arr As Variant, lst As Class1
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

With Sheet1
    x = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("A1:F" & x).Value
End With

.Range("A1:F" & x).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes

For x = LBound(arr) To UBound(arr)
    If Not dict.Exists(arr(x, 1) & "|" & arr(x, 2) & "|" & arr(x, 3)) Then
        Set lst = New Class1
        lst.Col1 = arr(x, 1)
        lst.Col2 = arr(x, 2)
        lst.Col3 = arr(x, 3)
        lst.Col4 = arr(x, 4)
        lst.Col5 = arr(x, 5)
        lst.Col6 = arr(x, 6)
        dict.Add arr(x, 1) & "|" & arr(x, 2) & "|" & arr(x, 3), lst
    Else
        dict(arr(x, 1) & "|" & arr(x, 2) & "|" & arr(x, 3)).Col4 = dict(arr(x, 1) & "|" & arr(x, 2) & "|" & arr(x, 3)).Col4 + arr(x, 4)
        dict(arr(x, 1) & "|" & arr(x, 2) & "|" & arr(x, 3)).Col5 = dict(arr(x, 1) & "|" & arr(x, 2) & "|" & arr(x, 3)).Col5 + arr(x, 5)
    End If
Next x

With Sheet1
    x = 1
    For Each Key In dict.Keys
        .Cells(x, 1).Value = dict(Key).Col1
        .Cells(x, 2).Value = dict(Key).Col2
        .Cells(x, 3).Value = dict(Key).Col3
        .Cells(x, 4).Value = dict(Key).Col4
        .Cells(x, 5).Value = dict(Key).Col5
        .Cells(x, 6).Value = dict(Key).Col6
        x = x + 1
    Next Key
End With

End Sub

代码中的一些错误,包括在删除第一个重复项之前填充数组以及让RemoveDuplicates在你之外With声明并包括 F 列。为了使您的代码正常工作,您可以尝试以下操作:

Before

Sub Test()

Dim x As Long, arr As Variant, lst As Class1
Dim dict As Object: Set dict = CreateObject("Scripting.Dictionary")

With Sheet1

    'Step one: Delete duplicates over columns A-E
    x = .Cells(.Rows.Count, 1).End(xlUp).Row
    .Range("A1:F" & x).RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5), Header:=xlYes

    'Step two: Populate your array
    x = .Cells(.Rows.Count, 1).End(xlUp).Row
    arr = .Range("A2:F" & x).Value

    'Step three: Clear range
    .Range("A2:F" & x).ClearContents

    'Step Four: Go through your array and populate a dictionary
    For x = LBound(arr) To UBound(arr)
        Set lst = New Class1
        lst.Col1 = arr(x, 1)
        lst.Col2 = arr(x, 2)
        lst.Col3 = arr(x, 3)
        lst.Col4 = arr(x, 4)
        lst.Col5 = arr(x, 5)
        lst.Col6 = arr(x, 6)
        KeyX = Join(Array(arr(x, 1), arr(x, 2), arr(x, 3)), "|")
        If dict.Exists(KeyX) = False Then
            dict.Add KeyX, lst
        Else
            dict(KeyX).Col4 = dict(KeyX).Col4 + arr(x, 4)
            dict(KeyX).Col5 = dict(KeyX).Col5 + arr(x, 5)
        End If
    Next x

    'Step five: Go through your dictionary and write to sheet
    x = 2
    For Each key In dict.Keys
        .Range(.Cells(x, 1), .Cells(x, 6)).Value = Array(dict(key).Col1, dict(key).Col2, dict(key).Col3, dict(key).Col4, dict(key).Col5, dict(key).Col6)
        x = x + 1
    Next key

End With

End Sub

After

让我知道进展如何=)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在不同情况下删除Excel中的重复项(VBA)? 的相关文章

  • 单步执行会产生与运行不同的结果

    我有一段代码用于拆分单元格中的文本 数据是由不使用任何有用的分隔符的调查程序输出的 因此不幸的是 将文本转换为列对我没有任何帮助 我写了这段代码 但事实证明 两种情况下结果是不同的 我一步步运行代码 直到添加第一列 然后让它完成 我从执行宏
  • Power Query 根据 Excel 列列表过滤 SQL 视图

    有没有办法使用 Power Query 根据 Excel 表列中的值列表过滤 SQL 视图 我有一个返回大量数据 数百万条记录或属性 的 SQL 视图 用户希望根据属性 ID 的 Excel 表格列进行过滤 我知道我可以根据 Power 查
  • 有一个更好的方法吗? VBA脚本

    我这里有一份供料泵的跟踪清单 我们必须考虑库存水平 所以我做了这个 当您将泵输入表中时 什么也没有发生 当您将患者姓名放在上面时 该行会变成粉红色 表明该泵已离开我们的库存 我试图将一个脚本 宏放在一起 可以计算我们仍然拥有的泵 即白色行
  • 出现错误时如何中断?

    我有一个函数 其中某个地方有一些错误导致它返回 VALUE当我尝试在Excel中执行它时 我不知道错误在哪里 单步调试代码也很乏味 所以我希望调试器在发生错误时立即中断 我尝试去Tools gt options gt General gt
  • 如何使用 VBA 在 Excel 2010 工作表中添加选项按钮以进行分组?

    I want to add many option button to an excel worksheet not to a VBA form and want to group them by row The result should
  • 在vba中为图例设置颜色代码

    我在每个工作表中都有数据透视表 我必须对它们进行比较 但每个工作表中图例的颜色都不同 如何设置颜色 例如 如果我的图例条目是 ISO 我希望它始终为 蓝色 如果它是 LAT 我希望它在每张纸中都为 红色 这可以通过操纵来完成Series中的
  • Excel 2010 中隐藏行的宏

    我对 VBA 编程有点陌生 我在互联网上阅读了一些内容 但找不到我需要的内容或无法使其正常工作 我的问题 在工作表 表 1 的单元格 B6 中 给出了项目将被利用的年数 在工作表 sheet 2 和 sheet 3 中 我制作了 50 年的
  • 创建具有子级别的类属性

    我一直在读这个topic https excelmacromastery com vba class modules A Quick Guide to the VBA Class Module关于如何使用类模块 我的目标是提高代码性能和可读
  • Excel 仅粘贴特殊使用值,还将值的数据类型与值一起复制到目标单元格中

    我一直在尝试更多地了解 Excel 单元格 特别是它们的数据类型 如果有人对细节感兴趣 我的调查位于下面的编号点中 我的结论被标记为 A 到 D 我真的很感兴趣是否有人有什么可以补充的 答 每个 Excel 单元格都有一个属性 用于定义它将
  • 是否可以编写自定义 Power Query 连接器?

    在 来自其他来源 下的 Power Query 中 我们看到许多专业提供商 Facebook SAP SalesForce 等 我有兴趣编写一个自定义提供程序来访问无法通过任何内置连接器使用的本地专有数据存储 我知道 访问没有支持连接器的数
  • 在c#中使用OleDB读取excel文件?

    我正在构建一个程序来将 excel 文件读取到 dataGridView 中 using System using System Collections Generic using System ComponentModel using S
  • 条件格式化VBA多个条件

    我对 VBA 世界非常陌生 需要一些关于条件格式的 VBA 方面的帮助 1 我需要将条件格式应用于列 M 7岁以下绿色 黄色从7 20 红色大于20 最重要的条件是 如果列 N 声明 NOPO 则我不希望应用条件格式 我已经制定了一个公式来
  • VBA:如何从 MS Access 运行另一个应用程序

    我一直在试图解决这个问题 但似乎我在任何地方都找不到解决该问题的方法 这是第一部分 VBA Shell 命令始终返回 找不到文件 https stackoverflow com questions 10439024 vba shell co
  • 自动创建 Outlook 约会

    我有一个跟踪到期日期的电子表格 excel 2003 我想知道是否有办法让这些到期日期在 Outlook 中创建约会 提醒 到期日期位于电子表格的一个字段中 实体名称位于另一列中 理想情况下 我希望 Outlook 2003 能够获取日期
  • 将一个大的 xlsx 文件导入到 R 中?

    我想知道是否有人知道从 大 xlsx 文件 20Mb 导入数据的方法 我尝试使用 xlsx 和 XLConnect 库 不幸的是 两者都使用 rJava 我总是收到相同的错误 gt library XLConnect gt wb lt lo
  • 如何使用 xlrd 将新列和行添加到 .xls 文件

    如何向 xlrd 中的工作表添加新列和 或行 我有一个使用 open workbook 读取的 xls 文件 我需要在第一张表中添加一个新列 bouncebacks 然后在该表中添加新行 但我在 xlrd 文档中找不到任何显示如何添加新行和
  • 使用 php 和 symfony 从数组创建 Excel 文件

    我正在尝试使用 PHP 和 symfony 将数组导出为 XLS 文件 如下面的代码所示 创建 XLS 文件后 我只能获取数组的最后一行 并且它显示在文件的第一行中 似乎 lignes 变量没有增加 我不明白出了什么问题 有人可以帮忙吗 f
  • 修剪工作簿中的所有单元格(VBA)

    我尝试向一直在开发的 Excel 加载项添加功能 该功能会修剪已用单元格末尾的前导空格 甚至可能解析文本 我需要这样做的原因只是为了将其变成超链接我已经在工作了 但是那部分很好 这是我到目前为止所尝试的 我已经修剪了active works
  • 父子进程隔离和子进程列表

    请阅读以下模板 PID Status LPID 10 Closed 25 11 Open 25 31 Open 31 25 Closed 25 54 Open 31 17 Open 17 20 Closed 31 88 closed 77
  • 有没有办法破解 Excel VBA 项目的密码?

    我被要求更新一些 Excel 2003 宏 但 VBA 项目受密码保护 而且似乎缺少文档 没有人知道密码 有没有办法删除或破解 VBA 项目上的密码 你可以直接尝试这个VBA不需要十六进制编辑的方法 它适用于任何文件 xls xlsm xl

随机推荐

  • 在 webpack 构建中包含 git commit 哈希值和日期

    我正在使用react es6 webpack 我想在我的应用程序中的某处显示构建日期和 git 哈希值 最好的方法是什么 你可以使用 webpack 的定义插件 https webpack js org plugins define plu
  • WPF 文本块 TargetNullValue 不起作用?

    我有一个 wpf 文本块 如下所示
  • GOTO 仍然被视为有害吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 每个人都知道迪杰斯特拉 Dijkstra 给编辑的信 转到被认为有害的声明 http portal acm org citation cfm d
  • 有没有免费的lib访问html5数据库SQLite?

    该库应该易于使用来访问 html5 本地存储 sqlite 就像定义表 添加 更新 删除实体 从数据库查询实体一样 可能使用该库我可以编写如下代码 code var db new MyDataBase var users db Users
  • 为什么一个能工作,一个崩溃?

    这已经让我抓狂了一个多星期了 下面是游戏中机器人玩家的两段 Lua 代码片段比特战士 http bitfighter org 用 C 编写 使用 LuaWrapper 的变体进行绑定 当我第一次启动 Lua 脚本时 两者都完全按预期工作 但
  • REST批量删除多个项目

    我需要按批处理中的 id 删除多个项目 但是 HTTP DELETE 不支持正文有效负载 解决方案 1 DELETE path abc itemId 1 itemId 2 itemId 3 on the server side it wil
  • 气流相对导入外部 /dag 目录

    我无法将通用代码移至气流使用的 dag 目录之外 我看过气流源 https github com apache incubator airflow blob 4f20f607764bb3477419321b5dfd0c53ba1db3c0
  • 下载并保存 PDF 以供查看

    我正在尝试从我的应用程序下载 PDF 文档并将其显示在 IBooks 中 或者至少在下载完成后使其可供阅读 我按照 Xamarin 的下载示例进行操作 它允许我下载 PDF 并将其保存在本地 它也以错误的编码保存 这是我到目前为止所尝试过的
  • MongoDB NodeJS 返回子文档

    我正在尝试返回与查询字段匹配的子文档 我只想返回与用户匹配的 PIN 该 PIN 保存在帐户集合中 这就是我到目前为止所得到的 router post SelectUser async req res gt try const acc aw
  • 我的网络应用程序应该支持哪个版本的 Internet Explorer (IE) [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 由于 MS 将很快停止支持 IE 8 之前的任何内容 我不确定是否应该使我的网络应用程序与那些旧浏览器兼容 我知道仍然有人在使用它们 但我不知道是否有
  • Android 音频播放的广播意图?

    我正在尝试构建一个 Android 应用程序 它使用广播接收器来检测音乐播放何时开始 然后提供手势控制来触发发送跳过曲目意图 首先 我只想将接收器设置为在音频播放开始时触发通知 以便我可以检查这个概念是否有效 我已经在清单文件中声明了一个服
  • 如何在Python中查找n天前的日期?

    我想写一个脚本 给Python几天的时间 我们称之为d 它给了我我们的日期d几天前 我正在努力处理模块日期时间 import datetime tod datetime datetime now d timedelta days 50 a
  • Java Swing Shift+F10 辅助功能

    Per accessibility requirements Shift F10 is supposed to open right click context menus In Swing one approach is to just
  • 发送电子邮件时出现 SmtpException

    我正在尝试通过我的 C 代码发送电子邮件 但我得到SmtpException 连接尝试失败 因为连接方在一段时间后没有正确响应 或者建立的连接失败 因为连接的主机未能响应 173 194 67 109 587 这是我发送电子邮件的方式 st
  • Ansible 清单可以包含另一个清单吗?

    我们有一组在应用程序的不同实例之间共享的服务器 并希望它们的列表是一个单独的文件 以及其他特定于实例的清单包括 it 我知道 这可以通过dynamic库存 但这些是代码 我们希望保留我们的服务器列表data 可以这么说 对于 INI 库存
  • 未找到 qml XmlListModel 插件

    在我的项目中 我尝试使用 qml 内置的 Xml 列表模块 但是当我编译到手机时 出现此错误 W Qt 20100 assets qml FlickrDemo main qml 4 null assets qml FlickrDemo ma
  • @supports 的功能检测?

    如何检测浏览器是否支持 CSS supports 功能 由于 Internet Explorer 和 Safari 不支持它 因此我的 Web 应用程序不知道在这些浏览器中应用哪些样式 使用纯 CSS 您可以依靠级联来确定浏览器是否理解 s
  • 使用 Gunicorn 部署时如何在 Flask 方法之间共享内存资源

    我使用 Flask 实现了一个简单的微服务 其中处理请求的方法根据请求数据和加载到内存中的相当大的数据结构计算响应 现在 当我使用gunicorn和大量工作线程部署此应用程序时 我只想在所有工作人员的请求处理程序之间共享数据结构 由于数据只
  • LWJGL 教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在不同情况下删除Excel中的重复项(VBA)?

    我需要将相应的值汇总到右侧的列中 但也需要删除重复项 这是交易 例如 如果我有从 A 到 F 的列 如果 A 到 E 列与另一行相同 则宏将删除该行并保存旧行 如果 A 至 C 列与另一现有行相同 宏将删除另一行并将 D 和 E 列中的相应