ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
Python自动化办公应用大全 Excel 2021函数公式学习大典 Kutools for Office 套件发布 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: 一休和尚

[求助] VBA代码完善

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-14 18:07 | 显示全部楼层

老师:
如果增加J列和K列合并;N列保存合并后的最后一行的数据;
如何编制;
感谢老师;

TA的精华主题

TA的得分主题

发表于 2025-4-15 00:30 | 显示全部楼层
  1.     ' 没有示例文件,代码未经测试

  2.     ' 获取最后一行
  3.     lastRow = ws.Cells(ws.Rows.Count, "J").End(xlUp).Row
  4.    
  5.     ' ** 反向循环记录最后一行
  6.     For i = lastRow To 2 Step -1
  7.         key = ws.Cells(i, "J").Value & "|" & ws.Cells(i, "K").Value
  8.         
  9.         If dict.exists(key) Then
  10.             ' 合并Q列内容
  11.             If ws.Cells(i, "N").Value <> "" Then
  12.                 arr = dict(key)
  13.                 arr(1) = arr(1) & "+" & ws.Cells(i, "N").Value
  14.                 dict(key) = arr
  15.             End If
  16.             If delRows Is Nothing Then
  17.                 Set delRows = ws.Cells(i, 1)
  18.             Else
  19.                 Set delRows = Application.Union(delRows, ws.Cells(i, 1))
  20.             End If
  21.         Else
  22.             ' 记录首行信息 [行号, Q列内容]
  23.             dict.Add key, Array(i, ws.Cells(i, "N").Value)
  24.         End If
  25.     Next i
  26.    
  27.     ' 更新首行的n列合并内容
  28.     For Each key In dict
  29.         ws.Cells(dict(key)(0), "N").Value = dict(key)(1)
  30.     Next
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-15 18:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
12楼老师好:
这个代码测试后不行;我上传了附件,里面说明了要求;
第一个表格原始状态;第二个表格是整合后的状态;
请老师帮忙看看如何整改达到要求;
感谢

副本SAP生产任务单-1 Excel 工作表.rar

5.68 KB, 下载次数: 3

TA的精华主题

TA的得分主题

发表于 2025-4-16 00:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
一休和尚 发表于 2025-4-15 18:31
12楼老师好:
这个代码测试后不行;我上传了附件,里面说明了要求;
第一个表格原始状态;第二个表格是整 ...

没有原始数据表格,没有代码,没有具体需求

TA的精华主题

TA的得分主题

 楼主| 发表于 2025-4-16 18:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
taller 发表于 2025-4-16 00:25
没有原始数据表格,没有代码,没有具体需求

老师:

昨天原始数据表格错误了;
这个表格要求和整合前后的都在里面;
帮忙看下;
感谢!

SAP生产任务单-1 Excel 工作表(1).rar

16.25 KB, 下载次数: 4

TA的精华主题

TA的得分主题

发表于 2025-4-17 02:24 | 显示全部楼层
  1. Option Explicit
  2. ' 代码逻辑完全相同,如果合并其他列,请自行调整添加
  3. Sub 删除IL重复项合并Q()
  4.     Dim dict As Object
  5.     Dim lastRow As Long, i As Long
  6.     Dim key As Variant
  7.     ' ** 使用Range对象记录需要删除的行,可以一次性删除多行,效率更高
  8.     Dim delRows As Range
  9.     Dim ws As Worksheet
  10.     Dim t As Double, arr
  11.    
  12.     Set ws = ActiveSheet
  13.     Set dict = CreateObject("Scripting.Dictionary")
  14.     t = Timer
  15.     Application.ScreenUpdating = False
  16.     Application.Calculation = xlCalculationManual
  17.    
  18.     ' 获取最后一行
  19.     lastRow = ws.Cells(ws.Rows.Count, "I").End(xlUp).Row
  20.    
  21.     ' ** 正向循环才能记录首行

  22.     For i = 2 To lastRow
  23.         key = ws.Cells(i, "I").Value & "|" & ws.Cells(i, "L").Value
  24.         
  25.         If dict.exists(key) Then
  26.             arr = dict(key)
  27.             ' 按照不同逻辑合并
  28.             arr(1) = arr(1) & "+" & ws.Cells(i, "J").Value
  29.             arr(2) = arr(2) & "+" & ws.Cells(i, "K").Value
  30.             arr(3) = arr(3) & "+" & ws.Cells(i, "L").Value
  31.             arr(4) = ws.Cells(i, "N").Value
  32.             dict(key) = arr
  33.             If delRows Is Nothing Then
  34.                 Set delRows = ws.Cells(i, 1)
  35.             Else
  36.                 Set delRows = Application.Union(delRows, ws.Cells(i, 1))
  37.             End If
  38.         Else
  39.             ' 记录首行信息 [行号, 合并列内容]
  40.             dict.Add key, Array(i, ws.Cells(i, "J").Value, _
  41.                 ws.Cells(i, "K").Value, ws.Cells(i, "L").Value, _
  42.                 ws.Cells(i, "N").Value)
  43.         End If
  44.     Next i
  45.    
  46.     ' 更新首行的Q列合并内容
  47.     For Each key In dict
  48.         i = dict(key)(0)
  49.         ws.Cells(i, "J").Value = dict(key)(1)
  50.         ws.Cells(i, "K").Value = dict(key)(2)
  51.         ws.Cells(i, "L").Value = dict(key)(3)
  52.         ws.Cells(i, "N").Value = dict(key)(4)
  53.     Next

  54.     i = delRows.Cells.Count
  55.     ' ** 一次性删除合并行
  56.     delRows.EntireRow.Delete
  57.    
  58.     MsgBox "处理完成!" & vbCrLf & _
  59.            "合并行数:" & i & vbCrLf & _
  60.            "耗时:" & Format(Timer - t, "0.00") & "秒", _
  61.            vbInformation

  62. Cleanup:
  63.     Application.ScreenUpdating = True
  64.     Application.Calculation = xlCalculationAutomatic
  65.     Set dict = Nothing
  66.     Set delRows = Nothing
  67. End Sub



复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-12-15 03:19 , Processed in 1.046828 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表