ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 汇总问题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-7-20 09:30 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
把sheet2汇总成sheet1的格式,我分类汇总也弄不成那样的格式,哪位老师帮我弄一下,十分感谢!!! 求助.rar (256.53 KB, 下载次数: 15)

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:01 | 显示全部楼层
1721440900398.png

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:02 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
字典的基础应用
求助.rar (311.14 KB, 下载次数: 16)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:19 | 显示全部楼层
Sub abey()
Dim i&, j&, k&
Dim arr, brr()
Set d = VBA.CreateObject("scripting.dictionary")

With Sheets("sheet2")
    arr = .Range("a1").CurrentRegion
    ReDim brr(1 To UBound(arr), 1 To 3)
   For i = 1 To UBound(arr)
        kw = arr(i, 1) & "," & arr(i, 2)
        If Not d.exists(kw) Then
            n = n + 1
            d(kw) = n
            brr(n, 1) = Split(kw, ",")(0)
            brr(n, 2) = Split(kw, ",")(1)
            brr(n, 3) = arr(i, 3)
        Else
            r = d(kw)
            brr(n, 3) = brr(n, 3) + arr(i, 3)
        End If
   Next
End With
With Sheets("sheet1")
[a1:c10000].ClearContents
[a1].Resize(n, 3) = brr
End With
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:22 | 显示全部楼层
用PQ解决,香不香?????????????


捕获2.PNG
捕获.PNG

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:24 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个简单。

求助.rar

307.47 KB, 下载次数: 12

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:25 | 显示全部楼层
Sub abey()
Dim i&, j&, k&
Dim arr, brr()
Set d = VBA.CreateObject("scripting.dictionary")

With Sheets("sheet2")
    arr = .Range("a1").CurrentRegion
    ReDim brr(1 To UBound(arr), 1 To 3)
   For i = 1 To UBound(arr)
        kw = arr(i, 1) & "," & arr(i, 2)
        If Not d.exists(kw) Then
            n = n + 1
            d(kw) = n
            brr(n, 1) = Split(kw, ",")(0)
            brr(n, 2) = Split(kw, ",")(1)
            brr(n, 3) = arr(i, 3)
        Else
            r = d(kw)
            brr(n, 3) = brr(n, 3) + arr(i, 3)
        End If
   Next
End With
With Sheets("sheet1")
[a1:c10000].ClearContents
[a1].Resize(n, 3) = brr
End With
End Sub

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:28 | 显示全部楼层
  1. Sub test()
  2.     Dim sql As String
  3.     Dim mybook As String
  4.     Dim cnn As Object
  5.     Dim rs As Object
  6.     Set cnn = CreateObject("adodb.connection")
  7.     Set rs = CreateObject("adodb.recordset")
  8.     mybook = ThisWorkbook.FullName
  9.     With cnn
  10.         If Application.Version = "11.0" Then
  11.             .Provider = "microsoft.jet.oledb.4.0"
  12.             .ConnectionString = "extended properties=""excel 8.0;HDR=YES;IMEX=1"";data source=" & mybook
  13.         Else
  14.             .Provider = "microsoft.ACE.oledb.12.0"
  15.             .ConnectionString = "extended properties=""excel 12.0;HDR=YES;IMEX=1"";data source=" & mybook
  16.         End If
  17.         .Open
  18.     End With
  19.     sql = "select 药品,医生,sum(数量) as 数量 from [sheet2$a1:c] group by 药品,医生"
  20.     rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
  21.     With Worksheets("sheet1")
  22.         .Cells.Delete
  23.         For j = 0 To rs.Fields.Count - 1
  24.             .Cells(1, j + 1) = rs.Fields(j).Name
  25.         Next
  26.         .Range("a2").CopyFromRecordset rs
  27.     End With
  28. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-7-20 10:29 | 显示全部楼层
数据整齐规范,ADO也方便。

求助.rar

347.92 KB, 下载次数: 21

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2024-7-20 11:18 | 显示全部楼层
Sub qs()
Dim arr, brr, i, dic
Set dic = CreateObject("scripting.dictionary")
arr = Sheet2.Range("a1").CurrentRegion.Value
ReDim brr(1 To UBound(arr), 1 To 3)
    For i = 2 To UBound(arr)
    s = arr(i, 1) & arr(i, 2)
    If Not dic.exists(s) Then
        M = M + 1
        dic(s) = M
        brr(M, 1) = arr(i, 1): brr(M, 2) = arr(i, 2): brr(M, 3) = arr(i, 3)
    Else
        rw = dic(s)
        brr(rw, 3) = brr(rw, 3) + arr(i, 3)
   
    End If
    Next
Sheet1.Range("a2").Resize(M, 3) = brr
Set dic = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 04:40 , Processed in 0.044659 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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