Excel VBA实现智能合并重复元器件数据(型号去重+数量累加)

news/2025/3/19 17:53:49/

Excel VBA实现智能合并重复元器件数据(型号去重+数量累加)

关键词:Excel自动化、VBA数据处理、重复项合并、元器件管理

功能概述

本工具针对电子元器件库存表/采购清单等场景,实现:

  1. 型号列自动识别重复元器件
  2. 智能合并重复项并累加数量
  3. 保留首次出现记录,删除后续重复行
  4. 支持万级数据量快速处理

应用场景

  • 电子元器件库存合并
  • BOM表重复项清理
  • 采购订单数据整合
  • 实验室耗材统计

实现原理

核心算法流程图

开始
获取最后行号
当前行<=末行?
读取型号/数量
从末行向前扫描
型号相同?
累加数量并删行
继续向上扫描
扫描完成?
更新当前行数量
结束

完整代码

Sub MergeDuplicateComponents()On Error Resume Next ' 基础错误处理'【参数配置区】可根据需求修改Const TYPE_COL As Integer = 3   ' 型号所在列(C列)Const QTY_COL As Integer = 6    ' 数量所在列(F列)Const START_ROW As Integer = 2  ' 数据起始行Dim ws As WorksheetDim lastRow As Long, i As Long, j As LongDim currentType As String, currentQty As LongSet ws = ActiveSheetlastRow = ws.Cells(ws.Rows.Count, TYPE_COL).End(xlUp).RowApplication.ScreenUpdating = FalseApplication.Calculation = xlCalculationManual' 从第二行开始向上处理i = START_ROWDo While i <= lastRowcurrentType = ws.Cells(i, TYPE_COL).ValuecurrentQty = ws.Cells(i, QTY_COL).Value' 从最后一行向下检查For j = lastRow To i + 1 Step -1If ws.Cells(j, TYPE_COL).Value = currentType ThencurrentQty = currentQty + ws.Cells(j, QTY_COL).Valuews.Rows(j).DeletelastRow = lastRow - 1End IfNext j' 更新当前行的数量ws.Cells(i, QTY_COL).Value = currentQtyi = i + 1LoopApplication.ScreenUpdating = TrueApplication.Calculation = xlCalculationAutomaticMsgBox "处理完成!共合并" & lastRow - START_ROW + 1 & "条有效记录", vbInformation
End Sub

代码说明:

  • 初始化设置:获取活动工作表并确定数据最后一行

  • 从第二行开始逐行处理(i循环)

  • 对每个元器件类型,从最后一行向前检查重复项(j循环)

  • 发现重复时累加数量并删除重复行

  • 更新当前行的汇总数量

  • 使用双循环结构确保完整遍历所有数据

  • 添加了屏幕更新和计算控制以优化性能

使用方法:

  • 按Alt+F11打开VBA编辑器

  • 插入新模块并粘贴代码

  • 返回Excel运行宏"MergeDuplicateComponents"

  • 确保数据格式符合要求(第3列为型号,第6列为数量)

注意事项:

  • 数据必须从第2行开始

  • 第一行会被自动识别为标题行

  • 合并后保留最上方出现的记录

  • 原始数据建议先备份

代码主要实现以下功能

  • 智能行号跟踪

  • 倒序删除避免遗漏

  • 数量自动累加

  • 高效数据处理机制

执行效果

  • 所有相同型号的记录会被合并到第一个出现的位置,数量自动求和,后续重复行自动删除。
    处理前如图
    在这里插入图片描述
    处理后如图
    在这里插入图片描述
    可以看出,22R和1k的电阻进行了合并,且数量进行了相加。

**如果觉得这个解决方案有帮助,欢迎点赞❤️收藏⭐️关注✅!如果有其他Excel难题,欢迎在评论区留言交流~


http://www.ppmy.cn/news/1580381.html

相关文章

Linux的root用户 、用户组

su和exit命令 1、su命令 就是用于账户切换的系统命令&#xff0c;其来源英文单词:Switch User 语法: su [-] [用户名] - 符号是可选的,表示是否在切换用户后加载环境变量&#xff0c;建议带上 参数: 用户名&#xff0c;表示要切换的用户,用户名也可以省略,省略表示切换到…

Ubuntu 安装 gdb 错误解决方案

Ubuntu 安装 gdb 错误解决方案 一、APT 锁定问题 错误内容 Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by process 922问题分析 在 Ubuntu 系统中执行 apt install 时&#xff0c;若出现上述错误&#xff0c;说明进程 922 正在占…

Spring Boot启动流程及源码实现深度解析

Spring Boot启动流程及源码实现深度解析 一、启动流程概述 Spring Boot的启动流程围绕SpringApplication类展开&#xff0c;核心流程可分为以下几个阶段&#xff1a; 初始化阶段&#xff1a;推断应用类型&#xff0c;加载ApplicationContextInitializer和ApplicationListene…

C++模版(进阶)

文章目录 一、非类型模版参数二、模版的特化2.1 概念2.2 函数模版特化2.2.1 函数模版特化为指针类型注意事项 2.3 类模版特化2.3.1 全特化2.3.2 偏特化(半特化)2.3.3 类模板特化应用示例 三、模版分离编译3.1 什么是分离编译&#xff1f;3.2 模版的分离编译3.3 解决方法! 四、模…

射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用

射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用 一、FEM是什么? 射频前端模块(Front-End Module, FEM)是无线通信系统中负责处理射频信号的核心组件。它将多个关键电路集成在一个模块中,包括功率放大器(PA)、低噪声放大器(LNA)、射频开关(Switch)、…

深度学习处理时间序列(2)

在数据中寻找周期性 在多个时间尺度上的周期性&#xff0c;是时间序列数据非常重要且常见的属性。无论是天气、商场停车位使用率、网站流量、杂货店销售额&#xff0c;还是健身追踪器记录的步数&#xff0c;你都会看到每日周期性和年度周期性&#xff08;人类生成的数据通常还…

windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC

大家好&#xff0c;我是国货系创始人张云泽&#xff0c;最近不少小伙伴在后台问&#xff1a;“听说Windows协议要到期了&#xff1f;我的电脑会不会变砖&#xff1f;”还有人说&#xff1a;“华为笔记本以后用不了Windows了&#xff1f;鸿蒙系统能用吗&#xff1f;”今天咱们就…

机器学习——深入浅出理解朴素贝叶斯算法

文章目录 引言一、朴素贝叶斯定理概述1.从贝叶斯定理说起2.朴素贝叶斯的“朴素”之处3.朴素贝叶斯算法的应用 二、朴素贝叶斯算法的优缺点三、python代码实现案例1.导入库2.数据预处理3.模型训练4.模型评估5.完整代码 四、总结 引言 朴素贝叶斯算法&#xff0c;一个听起来充满…