ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: powerremain

[求助] 同类项合并,数量汇总,数据量较大,求助!!!!

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-30 20:27 | 显示全部楼层
longwin 发表于 2024-6-30 15:16
Sub test()
Set d = CreateObject("scripting.dictionary")
l = 3

老师,不改格式 怎么实现

TA的精华主题

TA的得分主题

发表于 2024-6-30 20:36 | 显示全部楼层
powerremain 发表于 2024-6-30 20:27
老师,不改格式 怎么实现

具体情况说一下,或者传个附件说明

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-30 21:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 powerremain 于 2024-6-30 21:53 编辑
longwin 发表于 2024-6-30 20:36
具体情况说一下,或者传个附件说明

就是除了G列数字求和汇总外,其他的列内容可能会是逻辑值,数组整体赋值后,格式就变了,变成value了。只是G列数字求和,别的列不变格式,只去重

TA的精华主题

TA的得分主题

发表于 2024-6-30 22:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
powerremain 发表于 2024-6-30 21:52
就是除了G列数字求和汇总外,其他的列内容可能会是逻辑值,数组整体赋值后,格式就变了,变成value了。只 ...

产品名称+产品型号+单位,数量(求和),其它的不变,这样?

TA的精华主题

TA的得分主题

发表于 2024-6-30 22:55 | 显示全部楼层
Set d = CreateObject("scripting.dictionary")
l = 3
Do
l1 = Cells(l, 1).End(xlDown).Row + 1
If Cells(l1 - 1, 1) = "*" Or Cells(l1 - 1, 1) = "" Then Exit Do
l2 = Cells(l, 1).End(xlDown).End(xlDown).Row - 1
arr = Range("D" & l1 & ":G" & l2)
For i = 1 To UBound(arr)
    s = arr(i, 1) & "|" & arr(i, 2) & "|" & arr(i, 3)
    d(s) = d(s) + arr(i, 4)
Next
ReDim brr(1 To d.Count, 1 To 4)
m = 0
For Each Key In d
    m = m + 1
    brr(m, 1) = Split(Key, "|")(0)
    brr(m, 2) = Split(Key, "|")(1)
    brr(m, 3) = Split(Key, "|")(2)
    brr(m, 4) = d(Key)
Next
Range("D" & l1 & ":G" & l1 + m - 1) = brr
If l2 > l1 + m - 1 Then
Rows(m + l1 & ":" & l2).Delete
End If
d.RemoveAll
l = l1 + m
Loop
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-30 23:36 | 显示全部楼层
9楼的效果
就是  产品名称+产品型号+单位这些数据会有逻辑值公式,现在您这个数据回来逻辑值都没有了,因为被数组赋值一遍。数量是要求和的

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-6-30 23:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
longwin 发表于 2024-6-30 22:51
产品名称+产品型号+单位,数量(求和),其它的不变,这样?

如9楼效果,(产品名称+产品型号+单位)实际使用数据会有公式是逻辑值,数组赋值后变成VALUE了,这几个不变
数量(求和)

TA的精华主题

TA的得分主题

发表于 2024-7-1 11:55 | 显示全部楼层
powerremain 发表于 2024-6-30 23:43
如9楼效果,(产品名称+产品型号+单位)实际使用数据会有公式是逻辑值,数组赋值后变成VALUE了,这几个不 ...

9樓的方式挺好的,
還有問題???

涉及保留格式及刪行, 用純數組不適宜\\

TA的精华主题

TA的得分主题

发表于 2024-7-1 11:57 | 显示全部楼层
powerremain 发表于 2024-6-30 23:43
如9楼效果,(产品名称+产品型号+单位)实际使用数据会有公式是逻辑值,数组赋值后变成VALUE了,这几个不 ...

同一產品型號, 應不會有不同品名及不同單位吧!!!
單一條件匯總即可!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-7-1 14:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
准提部林 发表于 2024-7-1 11:57
同一產品型號, 應不會有不同品名及不同單位吧!!!
單一條件匯總即可!!

9楼的结果是错误的
Sub text2()
Dim arr, d As Object
Set d = VBA.CreateObject("scripting.dictionary")
arr = Range("a1").CurrentRegion
For i = UBound(arr) To 4 Step -1
    If arr(i, 4) = "总计" Then d(arr(i, 4)) = d(arr(i, 4)) & " " & i
Next
s = Split(d("总计"), " ")
For r = 1 To UBound(s)
    If r = UBound(s) Then
       fr = 4
    Else
       fr = s(r + 1)
    End If
    er = s(r)
    d.RemoveAll
    Set unrng = Rows(5000)
    For i = fr To er
        If Cells(i, 4).Value = "" Then Exit For
        If Cells(i, 5).Value <> "" Then
           If Not d.exists(Cells(i, 5).Value) Then
              d(Cells(i, 5).Value) = i
           Else
              y = d(Cells(i, 5).Value)
              Cells(y, 7).Value = Cells(y, 7).Value + Cells(i, 7).Value
              Cells(y, 9).Value = Cells(y, 9).Value + Cells(i, 9).Value
              Set unrng = Union(unrng, Rows(i))
           End If
        End If
    Next
    unrng.EntireRow.Delete
Next
Set d = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 23:36 , Processed in 0.035830 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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