Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2363|回复: 8

[已解决]求简化红色代码

[复制链接]
发表于 2017-6-30 15:22 | 显示全部楼层 |阅读模式
本帖最后由 lidayu 于 2017-6-30 15:43 编辑

请老师赐教红色代码能否简化
Sub 汇总()
    Set d = CreateObject("scripting.dictionary")
    arr = Sheets("数据源").[a1].CurrentRegion
    For i = 2 To UBound(arr)
        x = arr(i, 6) & arr(i, 8) & "软肩章" '& arr(i, 5)   
        y = arr(i, 6) & arr(i, 8) & "硬肩章" '& arr(i, 5)     
        Z = arr(i, 6) & "" & "套式肩章" '& arr(i, 5)   
        d(x) = d(x) + arr(i, 9)
        d(y) = d(y) + arr(i, 9)
        d(Z) = d(Z) + arr(i, 9)
    Next
    [b4:p25] = ""
    arr = [a2:p25]
    For i = 3 To UBound(arr) - 2
        If arr(i, 1) = "" Then arr(i, 1) = arr(i - 1, 1)
        For j = 2 To 12
            If arr(1, j) = "" Then arr(1, j) = arr(1, j - 1)
            x = arr(i, 1) & arr(2, j) & arr(1, j)  
            arr(i, j) = d(x)
            arr(23, j) = arr(23, j) + arr(i, j)
            arr(24, 2) = arr(24, 2) + arr(i, j)   
        Next
        arr(i, 13) = arr(i, 2) + arr(i, 3) + arr(i, 4) + arr(i, 5) + arr(i, 6)
        arr(i, 14) = arr(i, 7) + arr(i, 8) + arr(i, 9) + arr(i, 10) + arr(i, 11)
        arr(i, 15) = arr(i, 12)
        arr(i, 16) = arr(i, 13) + arr(i, 14) + arr(i, 15)
        arr(23, 13) = arr(23, 13) + arr(i, 13)
        arr(23, 14) = arr(23, 14) + arr(i, 14)
        arr(23, 15) = arr(23, 15) + arr(i, 15)
    Next
    [a2:p25] = arr
    ActiveWindow.DisplayZeros = False
End Sub
最佳答案
2017-6-30 15:36
本帖最后由 大灰狼1976 于 2017-6-30 15:37 编辑

比如这句:arr(i, 13) = arr(i, 2) + arr(i, 3) + arr(i, 4) + arr(i, 5) + arr(i, 6)
改成:
For n = 2 To 6
  m = m+ arr(i, n)
Next n
arr(i, 13) =m
其他类似。
发表于 2017-6-30 15:36 | 显示全部楼层    本楼为最佳答案   
本帖最后由 大灰狼1976 于 2017-6-30 15:37 编辑

比如这句:arr(i, 13) = arr(i, 2) + arr(i, 3) + arr(i, 4) + arr(i, 5) + arr(i, 6)
改成:
For n = 2 To 6
  m = m+ arr(i, n)
Next n
arr(i, 13) =m
其他类似。

评分

参与人数 1 +3 收起 理由
lidayu + 3 赞一个

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-6-30 15:42 | 显示全部楼层
大灰狼1976 发表于 2017-6-30 15:36
比如这句:arr(i, 13) = arr(i, 2) + arr(i, 3) + arr(i, 4) + arr(i, 5) + arr(i, 6)
改成:
For n = 2  ...

大灰狼1976 您好,谢谢你赐教.
回复

使用道具 举报

发表于 2017-6-30 15:44 | 显示全部楼层
lidayu 发表于 2017-6-30 15:42
大灰狼1976 您好,谢谢你赐教.

没关系,循环语句经常要用到的。

点评

这样一来速度反而慢了吧  发表于 2017-6-30 15:51
回复

使用道具 举报

 楼主| 发表于 2017-6-30 15:56 | 显示全部楼层
大灰狼1976 发表于 2017-6-30 15:36
比如这句:arr(i, 13) = arr(i, 2) + arr(i, 3) + arr(i, 4) + arr(i, 5) + arr(i, 6)
改成:
For n = 2  ...

大灰狼1976 您好,这样加起来的数量不对啊
回复

使用道具 举报

发表于 2017-6-30 16:16 | 显示全部楼层
数量不对的可能性也是有的,就是我随便设的m变量被你在其他地方使用了,而且是全局变量。
或者是多循环中,一次循环后没有将m变量归零造成了(这个可能性最大),这种情况下,可以修改一下。
For n = 2 To 6
  m = m+ arr(i, n)
Next n
arr(i, 13) =m
m=0

评分

参与人数 1 +3 收起 理由
lidayu + 3 很给力

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-6-30 16:19 | 显示全部楼层
大灰狼1976 发表于 2017-6-30 16:16
数量不对的可能性也是有的,就是我随便设的m变量被你在其他地方使用了,而且是全局变量。
或者是多循环中 ...

大灰狼1976您好,这样对了非常感谢您N次的帮助
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-19 23:43 , Processed in 0.363750 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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