ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助编制程序(已解决)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-7-28 13:50 | 显示全部楼层
供参考
  1. Sub test()
  2.     Dim d, Arr
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     With Sheet2 's("明细科目审定表")
  5.         MX_last_range = .Range("A8").End(xlDown).Row
  6.         Arr = .Range("a8:X" & MX_last_range)
  7.         For i = 1 To UBound(Arr)
  8.             s = Arr(i, 24)
  9.             d(s) = d(s) + Arr(i, 12)
  10.         Next
  11.     End With
  12.     With Sheet15 's("会计科目审定表")
  13.         KM_last_range = .Range("A8").End(xlDown).Row
  14.         .Range("d8:n" & KM_last_range).ClearContents
  15.         For i = 8 To KM_last_range
  16.             s = .Cells(i, 1).Value
  17.             If d.exists(s) Then .Cells(i, 4).Value = d(s)
  18.         Next
  19.     End With
  20. End Sub
复制代码

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2018-7-28 13:52 | 显示全部楼层
楼主已经注册11年了,也该抽空学习一下呵.

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-28 14:37 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-28 14:50 | 显示全部楼层
zhouxiao 发表于 2018-7-28 13:52
楼主已经注册11年了,也该抽空学习一下呵.

谢谢啊,我只是用的时候学下,呵呵

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-28 15:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

你好,再请教下,如果想汇总多列,就得定义多个字典d\d1\d2....,是吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-7-28 15:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用了9个字典,请问,还能优化吗?

Sub test()
  Application.ScreenUpdating = False: Application.DisplayAlerts = False  '//????????????
  t = Timer  '//?趨??????
  Dim d, d1, d2, d3, d4, d5, d6, d7, d8, d9, arr
  Set d = CreateObject("Scripting.Dictionary")
  Set d1 = CreateObject("Scripting.Dictionary")
  Set d2 = CreateObject("Scripting.Dictionary")
  Set d3 = CreateObject("Scripting.Dictionary")
  Set d4 = CreateObject("Scripting.Dictionary")
  Set d5 = CreateObject("Scripting.Dictionary")
  Set d6 = CreateObject("Scripting.Dictionary")
  Set d7 = CreateObject("Scripting.Dictionary")
  Set d8 = CreateObject("Scripting.Dictionary")
  Set d9 = CreateObject("Scripting.Dictionary")
  With Sheets("??????????")
    MX_last_range = .Range("A8").End(xlDown).Row
    arr = .Range("a8:X" & MX_last_range)
    For i = 1 To UBound(arr)
        s = arr(i, 24)
        d(s) = d(s) + arr(i, 12)
        d1(s) = d1(s) + arr(i, 8)
        d2(s) = d2(s) + arr(i, 9)
        d3(s) = d3(s) + arr(i, 18)
        d4(s) = d4(s) + arr(i, 19)
        d5(s) = d5(s) + arr(i, 20)
        d6(s) = d6(s) + arr(i, 21)
        d7(s) = d7(s) + arr(i, 22)
        d8(s) = d8(s) + arr(i, 23)
        d9(s) = d9(s) + arr(i, 17)
    Next
  End With
  With Sheets("?????????")
    KM_last_range = .Range("A8").End(xlDown).Row
    .Range("d8:n" & KM_last_range).ClearContents
    For i = 8 To KM_last_range
        s = .Cells(i, 1).Value
        If d.exists(s) Then .Cells(i, 4).Value = d(s)
        If d1.exists(s) Then .Cells(i, 5).Value = d1(s)
        If d2.exists(s) Then .Cells(i, 6).Value = d2(s)
        If d3.exists(s) Then .Cells(i, 7).Value = d3(s)
        If d4.exists(s) Then .Cells(i, 8).Value = d4(s)
        If d5.exists(s) Then .Cells(i, 9).Value = d5(s)
        If d6.exists(s) Then .Cells(i, 10).Value = d6(s)
        If d7.exists(s) Then .Cells(i, 11).Value = d7(s)
        If d8.exists(s) Then .Cells(i, 12).Value = d8(s)
        If d9.exists(s) Then .Cells(i, 13).Value = d9(s)
    Next
  End With
  ActiveWorkbook.Save
  Application.ScreenUpdating = True: Application.DisplayAlerts = True
  MsgBox "????????" & Format(Timer - t, "#0.0000") & " ??", , "???????????"      '//??????????
End Sub

TA的精华主题

TA的得分主题

发表于 2018-7-28 17:06 来自手机 | 显示全部楼层
yjm0809 发表于 2018-7-28 15:07
你好,再请教下,如果想汇总多列,就得定义多个字典d\d1\d2....,是吗?

一个字典就可以,可以用科目编码+列字段名组成一个新的关键字,用字典给它赋值,同理,在结果表中查询返回结果时,将结果表里的科目编码+列字段名组成新关键字,查询前面已经存入字典里的结果,符合条件的就返回.
方法有很多,可以用vba+字典、vba+sql、sql+透视表、power query,如果列比较多的,用后面2种方法,要简单方便很多.
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-11 04:16 , Processed in 0.021383 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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