ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2142|回复: 12

[求助] 求助:多行相同名称转列,并汇总。

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-8-10 16:20 | 显示全部楼层 |阅读模式
求助:用VBA实现,  多行相同名称转列,并汇总。如图
TIM截图20200810161631.jpg

多行相同名称转列,并汇总.rar

8.44 KB, 下载次数: 22

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-11 11:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2020-8-11 11:50 来自手机 | 显示全部楼层

create table 工单号合并明细表2 as   select fillna(工单号) 工单号,fillna_2(总毛重) 总毛重,配件名称,重量 from 工单号合并明细表


select 工单号,总毛重,group_concat(配件名称||':'||配件重量,'</td><td>') 配件明细 from (select 工单号,总毛重,配件名称,sum(重量) 配件重量 from 工单号合并明细表2 group by 工单号,配件名称) group by 工单号
SRC_20200811_114930.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-11 12:10 | 显示全部楼层
Sub a()
    Dim arr, i, d, k, t, r As Range, j
    Set d = CreateObject("Scripting.Dictionary")
    arr = [a1].CurrentRegion
    Set r = [a1].CurrentRegion
    [F2:Z9999] = ""
    For i = 2 To UBound(arr)
        t = 6
        For j = i To Cells(i, 1).MergeArea.Count + i - 1
            d(arr(j, 4)) = d(arr(j, 4)) + arr(j, 5)
        Next
        For Each k In d.KEYS
            Cells(i, t) = k & ":" & Format(d(k), "0.00")
            t = t + 1
        Next
        d.RemoveAll
        i = i + Cells(i, 1).MergeArea.Count - 1
    Next
    Set d = Nothing
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-11 12:11 | 显示全部楼层
代码审核中

[attachimg]2534351[/attachimg
image.png

TA的精华主题

TA的得分主题

发表于 2020-8-11 12:11 | 显示全部楼层
'假设D列分段有序,,,

Option Explicit

Sub test()
  Dim arr, i, j, p, n, max, sum
  arr = [a1].CurrentRegion.Offset(1).Resize(, 5).Value
  ReDim brr(1 To UBound(arr, 1) - 1, 1 To 50) As String
  For i = 1 To UBound(arr, 1) - 1
    sum = sum + arr(i, 5)
    If arr(i, 4) <> arr(i + 1, 4) Or i = UBound(arr, 1) - 1 Or Len(arr(i + 1, 2)) > 0 Then
      n = n + 1
      brr(p + 1, n) = arr(i, 4) & ":" & sum: sum = 0
      If Len(arr(i + 1, 2)) Then
        If max < n Then max = n
        n = 0: p = i
      End If
    End If
  Next
  [f2].Resize(UBound(brr, 1), max) = brr
End Sub

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-11 12:19 | 显示全部楼层
Sub AwTest()
    Dim i%, x%, r%, y%, c%, s, n%, kStr$, arr, d As Object
    Set d = CreateObject("Scripting.Dictionary")
    arr = Range("A1:E" & Cells(Rows.Count, 5).End(3).Row)
    ReDim brr(1 To UBound(arr), 1 To UBound(arr))
    r = 1
    brr(r, 1) = "序号": brr(r, 2) = "工单号": brr(r, 3) = "总毛重"
    For i = 2 To UBound(arr)
        If Len(arr(i, 2)) Then kStr = arr(i, 2)
        x = d(kStr)
        If x = 0 Then r = r + 1: d(kStr) = r: brr(r, 1) = arr(i, 1): _
                brr(r, 2) = arr(i, 2): brr(r, 3) = arr(i, 3): x = r: c = 3
        y = d(kStr & "|" & arr(i, 4))
        If y = 0 Then c = c + 1: d(kStr & "|" & arr(i, 4)) = c: y = c: s = 0
        s = s + arr(i, 5): brr(x, y) = arr(i, 4) & ":" & s
        n = Application.Max(n, c)
    Next
    [f:z].Clear
    [g1].Resize(r, n) = brr
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-11 12:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
多行相同名称转列,并汇总.zip (17.19 KB, 下载次数: 14)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-8-11 18:49 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-8-12 10:23 | 显示全部楼层
一把小刀闯天下 发表于 2020-8-11 12:11
'假设D列分段有序,,,

Option Explicit

感谢一刀老师
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 02:55 , Processed in 0.048522 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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